<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="ie=edge"/><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/><meta name="generator" content="Gatsby 5.13.1"/><meta name="description" content="Flink 基本概念 Apache Flink 是一个框架和分布式处理引擎，用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行，并能以内存速度和任意规模进行计算。

名词介绍

Flink官网: 名词介绍

整体组件

下面的图片可点击模块跳转至官方…" data-gatsby-head="true"/><meta name="image" content="https://minimal-blog.lekoarts.de/banner.jpg" data-gatsby-head="true"/><meta property="og:title" content="Flink基本知识 | MQ Blog" data-gatsby-head="true"/><meta property="og:url" content="https://minimal-blog.lekoarts.de/flink-basic" data-gatsby-head="true"/><meta property="og:description" content="Flink 基本概念 Apache Flink 是一个框架和分布式处理引擎，用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行，并能以内存速度和任意规模进行计算。

名词介绍

Flink官网: 名词介绍

整体组件

下面的图片可点击模块跳转至官方…" data-gatsby-head="true"/><meta property="og:image" content="https://minimal-blog.lekoarts.de/banner.jpg" data-gatsby-head="true"/><meta property="og:type" content="website" data-gatsby-head="true"/><meta property="og:image:alt" content="Flink 基本概念 Apache Flink 是一个框架和分布式处理引擎，用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行，并能以内存速度和任意规模进行计算。

名词介绍

Flink官网: 名词介绍

整体组件

下面的图片可点击模块跳转至官方…" data-gatsby-head="true"/><meta name="twitter:card" content="summary_large_image" data-gatsby-head="true"/><meta name="twitter:title" content="Flink基本知识 | MQ Blog" data-gatsby-head="true"/><meta name="twitter:url" content="https://minimal-blog.lekoarts.de/flink-basic" data-gatsby-head="true"/><meta name="twitter:description" content="Flink 基本概念 Apache Flink 是一个框架和分布式处理引擎，用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行，并能以内存速度和任意规模进行计算。

名词介绍

Flink官网: 名词介绍

整体组件

下面的图片可点击模块跳转至官方…" data-gatsby-head="true"/><meta name="twitter:image" content="https://minimal-blog.lekoarts.de/banner.jpg" data-gatsby-head="true"/><meta name="twitter:image:alt" content="Flink 基本概念 Apache Flink 是一个框架和分布式处理引擎，用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行，并能以内存速度和任意规模进行计算。

名词介绍

Flink官网: 名词介绍

整体组件

下面的图片可点击模块跳转至官方…" data-gatsby-head="true"/><meta name="twitter:creator" content="@lekoarts_de" data-gatsby-head="true"/><meta name="gatsby-theme" content="@lekoarts/gatsby-theme-minimal-blog" data-gatsby-head="true"/><style data-href="/styles.3726f63730cd7b49d504.css" data-identity="gatsby-global-css">.button{-webkit-appearance:none;appearance:none;background-color:transparent;border:none;cursor:pointer;display:none;height:90px;outline:none;position:absolute;top:calc(50% - 90);width:60px}.carousel{height:0;padding-top:56.25%;position:relative;width:100%}.carousel-container{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;top:0;width:100%}.carousel:hover .button{display:inherit}.indicator-container{background-color:none;bottom:10px;display:flex;justify-content:center;position:absolute;width:100%}.indicator{border-radius:50%;height:10px;margin-left:10px;width:10px}.home-page{height:100%;position:relative;width:100%}.home-page>h1{left:10%;position:absolute;top:10%}.post>h1:first-child{display:none}</style><style type="text/css">
    .anchor.before {
      position: absolute;
      top: 0;
      left: 0;
      transform: translateX(-100%);
      padding-right: 4px;
    }
    .anchor.after {
      display: inline-block;
      padding-left: 4px;
    }
    h1 .anchor svg,
    h2 .anchor svg,
    h3 .anchor svg,
    h4 .anchor svg,
    h5 .anchor svg,
    h6 .anchor svg {
      visibility: hidden;
    }
    h1:hover .anchor svg,
    h2:hover .anchor svg,
    h3:hover .anchor svg,
    h4:hover .anchor svg,
    h5:hover .anchor svg,
    h6:hover .anchor svg,
    h1 .anchor:focus svg,
    h2 .anchor:focus svg,
    h3 .anchor:focus svg,
    h4 .anchor:focus svg,
    h5 .anchor:focus svg,
    h6 .anchor:focus svg {
      visibility: visible;
    }
  </style><script>
    document.addEventListener("DOMContentLoaded", function(event) {
      var hash = window.decodeURI(location.hash.replace('#', ''))
      if (hash !== '') {
        var element = document.getElementById(hash)
        if (element) {
          var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
          var clientTop = document.documentElement.clientTop || document.body.clientTop || 0
          var offset = element.getBoundingClientRect().top + scrollTop - clientTop
          // Wait for the browser to finish rendering before scrolling.
          setTimeout((function() {
            window.scrollTo(0, offset - 0)
          }), 0)
        }
      }
    })
  </script><link rel="sitemap" type="application/xml" href="/sitemap-index.xml"/><link rel="manifest" href="/manifest.webmanifest" crossorigin="anonymous"/><link rel="apple-touch-icon" sizes="192x192" href="/android-chrome-192x192.png"/><link rel="apple-touch-icon" sizes="512x512" href="/android-chrome-512x512.png"/><link rel="alternate" type="application/rss+xml" title="Minimal Blog - @lekoarts/gatsby-theme-minimal-blog" href="/rss.xml"/><style data-emotion="css-global 1bif9id" data-gatsby-head="true">html{--theme-ui-colors-transparent:transparent;--theme-ui-colors-black:#000;--theme-ui-colors-white:#fff;--theme-ui-colors-slate-0:#f8fafc;--theme-ui-colors-slate-1:#f1f5f9;--theme-ui-colors-slate-2:#e2e8f0;--theme-ui-colors-slate-3:#cbd5e1;--theme-ui-colors-slate-4:#94a3b8;--theme-ui-colors-slate-5:#64748b;--theme-ui-colors-slate-6:#475569;--theme-ui-colors-slate-7:#334155;--theme-ui-colors-slate-8:#1e293b;--theme-ui-colors-slate-9:#0f172a;--theme-ui-colors-gray-0:#f9fafb;--theme-ui-colors-gray-1:#f3f4f6;--theme-ui-colors-gray-2:#e5e7eb;--theme-ui-colors-gray-3:#d1d5db;--theme-ui-colors-gray-4:#9ca3af;--theme-ui-colors-gray-5:#6b7280;--theme-ui-colors-gray-6:#4b5563;--theme-ui-colors-gray-7:#374151;--theme-ui-colors-gray-8:#1f2937;--theme-ui-colors-gray-9:#111827;--theme-ui-colors-zinc-0:#fafafa;--theme-ui-colors-zinc-1:#f4f4f5;--theme-ui-colors-zinc-2:#e4e4e7;--theme-ui-colors-zinc-3:#d4d4d8;--theme-ui-colors-zinc-4:#a1a1aa;--theme-ui-colors-zinc-5:#71717a;--theme-ui-colors-zinc-6:#52525b;--theme-ui-colors-zinc-7:#3f3f46;--theme-ui-colors-zinc-8:#27272a;--theme-ui-colors-zinc-9:#18181b;--theme-ui-colors-neutral-0:#fafafa;--theme-ui-colors-neutral-1:#f5f5f5;--theme-ui-colors-neutral-2:#e5e5e5;--theme-ui-colors-neutral-3:#d4d4d4;--theme-ui-colors-neutral-4:#a3a3a3;--theme-ui-colors-neutral-5:#737373;--theme-ui-colors-neutral-6:#525252;--theme-ui-colors-neutral-7:#404040;--theme-ui-colors-neutral-8:#262626;--theme-ui-colors-neutral-9:#171717;--theme-ui-colors-stone-0:#fafaf9;--theme-ui-colors-stone-1:#f5f5f4;--theme-ui-colors-stone-2:#e7e5e4;--theme-ui-colors-stone-3:#d6d3d1;--theme-ui-colors-stone-4:#a8a29e;--theme-ui-colors-stone-5:#78716c;--theme-ui-colors-stone-6:#57534e;--theme-ui-colors-stone-7:#44403c;--theme-ui-colors-stone-8:#292524;--theme-ui-colors-stone-9:#1c1917;--theme-ui-colors-red-0:#fef2f2;--theme-ui-colors-red-1:#fee2e2;--theme-ui-colors-red-2:#fecaca;--theme-ui-colors-red-3:#fca5a5;--theme-ui-colors-red-4:#f87171;--theme-ui-colors-red-5:#ef4444;--theme-ui-colors-red-6:#dc2626;--theme-ui-colors-red-7:#b91c1c;--theme-ui-colors-red-8:#991b1b;--theme-ui-colors-red-9:#7f1d1d;--theme-ui-colors-orange-0:#fff7ed;--theme-ui-colors-orange-1:#ffedd5;--theme-ui-colors-orange-2:#fed7aa;--theme-ui-colors-orange-3:#fdba74;--theme-ui-colors-orange-4:#fb923c;--theme-ui-colors-orange-5:#f97316;--theme-ui-colors-orange-6:#ea580c;--theme-ui-colors-orange-7:#c2410c;--theme-ui-colors-orange-8:#9a3412;--theme-ui-colors-orange-9:#7c2d12;--theme-ui-colors-amber-0:#fffbeb;--theme-ui-colors-amber-1:#fef3c7;--theme-ui-colors-amber-2:#fde68a;--theme-ui-colors-amber-3:#fcd34d;--theme-ui-colors-amber-4:#fbbf24;--theme-ui-colors-amber-5:#f59e0b;--theme-ui-colors-amber-6:#d97706;--theme-ui-colors-amber-7:#b45309;--theme-ui-colors-amber-8:#92400e;--theme-ui-colors-amber-9:#78350f;--theme-ui-colors-yellow-0:#fefce8;--theme-ui-colors-yellow-1:#fef9c3;--theme-ui-colors-yellow-2:#fef08a;--theme-ui-colors-yellow-3:#fde047;--theme-ui-colors-yellow-4:#facc15;--theme-ui-colors-yellow-5:#eab308;--theme-ui-colors-yellow-6:#ca8a04;--theme-ui-colors-yellow-7:#a16207;--theme-ui-colors-yellow-8:#854d0e;--theme-ui-colors-yellow-9:#713f12;--theme-ui-colors-lime-0:#f7fee7;--theme-ui-colors-lime-1:#ecfccb;--theme-ui-colors-lime-2:#d9f99d;--theme-ui-colors-lime-3:#bef264;--theme-ui-colors-lime-4:#a3e635;--theme-ui-colors-lime-5:#84cc16;--theme-ui-colors-lime-6:#65a30d;--theme-ui-colors-lime-7:#4d7c0f;--theme-ui-colors-lime-8:#3f6212;--theme-ui-colors-lime-9:#365314;--theme-ui-colors-green-0:#f0fdf4;--theme-ui-colors-green-1:#dcfce7;--theme-ui-colors-green-2:#bbf7d0;--theme-ui-colors-green-3:#86efac;--theme-ui-colors-green-4:#4ade80;--theme-ui-colors-green-5:#22c55e;--theme-ui-colors-green-6:#16a34a;--theme-ui-colors-green-7:#15803d;--theme-ui-colors-green-8:#166534;--theme-ui-colors-green-9:#14532d;--theme-ui-colors-emerald-0:#ecfdf5;--theme-ui-colors-emerald-1:#d1fae5;--theme-ui-colors-emerald-2:#a7f3d0;--theme-ui-colors-emerald-3:#6ee7b7;--theme-ui-colors-emerald-4:#34d399;--theme-ui-colors-emerald-5:#10b981;--theme-ui-colors-emerald-6:#059669;--theme-ui-colors-emerald-7:#047857;--theme-ui-colors-emerald-8:#065f46;--theme-ui-colors-emerald-9:#064e3b;--theme-ui-colors-teal-0:#f0fdfa;--theme-ui-colors-teal-1:#ccfbf1;--theme-ui-colors-teal-2:#99f6e4;--theme-ui-colors-teal-3:#5eead4;--theme-ui-colors-teal-4:#2dd4bf;--theme-ui-colors-teal-5:#14b8a6;--theme-ui-colors-teal-6:#0d9488;--theme-ui-colors-teal-7:#0f766e;--theme-ui-colors-teal-8:#115e59;--theme-ui-colors-teal-9:#134e4a;--theme-ui-colors-cyan-0:#ecfeff;--theme-ui-colors-cyan-1:#cffafe;--theme-ui-colors-cyan-2:#a5f3fc;--theme-ui-colors-cyan-3:#67e8f9;--theme-ui-colors-cyan-4:#22d3ee;--theme-ui-colors-cyan-5:#06b6d4;--theme-ui-colors-cyan-6:#0891b2;--theme-ui-colors-cyan-7:#0e7490;--theme-ui-colors-cyan-8:#155e75;--theme-ui-colors-cyan-9:#164e63;--theme-ui-colors-sky-0:#f0f9ff;--theme-ui-colors-sky-1:#e0f2fe;--theme-ui-colors-sky-2:#bae6fd;--theme-ui-colors-sky-3:#7dd3fc;--theme-ui-colors-sky-4:#38bdf8;--theme-ui-colors-sky-5:#0ea5e9;--theme-ui-colors-sky-6:#0284c7;--theme-ui-colors-sky-7:#0369a1;--theme-ui-colors-sky-8:#075985;--theme-ui-colors-sky-9:#0c4a6e;--theme-ui-colors-blue-0:#eff6ff;--theme-ui-colors-blue-1:#dbeafe;--theme-ui-colors-blue-2:#bfdbfe;--theme-ui-colors-blue-3:#93c5fd;--theme-ui-colors-blue-4:#60a5fa;--theme-ui-colors-blue-5:#3b82f6;--theme-ui-colors-blue-6:#2563eb;--theme-ui-colors-blue-7:#1d4ed8;--theme-ui-colors-blue-8:#1e40af;--theme-ui-colors-blue-9:#1e3a8a;--theme-ui-colors-indigo-0:#eef2ff;--theme-ui-colors-indigo-1:#e0e7ff;--theme-ui-colors-indigo-2:#c7d2fe;--theme-ui-colors-indigo-3:#a5b4fc;--theme-ui-colors-indigo-4:#818cf8;--theme-ui-colors-indigo-5:#6366f1;--theme-ui-colors-indigo-6:#4f46e5;--theme-ui-colors-indigo-7:#4338ca;--theme-ui-colors-indigo-8:#3730a3;--theme-ui-colors-indigo-9:#312e81;--theme-ui-colors-violet-0:#f5f3ff;--theme-ui-colors-violet-1:#ede9fe;--theme-ui-colors-violet-2:#ddd6fe;--theme-ui-colors-violet-3:#c4b5fd;--theme-ui-colors-violet-4:#a78bfa;--theme-ui-colors-violet-5:#8b5cf6;--theme-ui-colors-violet-6:#7c3aed;--theme-ui-colors-violet-7:#6d28d9;--theme-ui-colors-violet-8:#5b21b6;--theme-ui-colors-violet-9:#4c1d95;--theme-ui-colors-purple-0:#faf5ff;--theme-ui-colors-purple-1:#f3e8ff;--theme-ui-colors-purple-2:#e9d5ff;--theme-ui-colors-purple-3:#d8b4fe;--theme-ui-colors-purple-4:#c084fc;--theme-ui-colors-purple-5:#a855f7;--theme-ui-colors-purple-6:#9333ea;--theme-ui-colors-purple-7:#7e22ce;--theme-ui-colors-purple-8:#6b21a8;--theme-ui-colors-purple-9:#581c87;--theme-ui-colors-fuchsia-0:#fdf4ff;--theme-ui-colors-fuchsia-1:#fae8ff;--theme-ui-colors-fuchsia-2:#f5d0fe;--theme-ui-colors-fuchsia-3:#f0abfc;--theme-ui-colors-fuchsia-4:#e879f9;--theme-ui-colors-fuchsia-5:#d946ef;--theme-ui-colors-fuchsia-6:#c026d3;--theme-ui-colors-fuchsia-7:#a21caf;--theme-ui-colors-fuchsia-8:#86198f;--theme-ui-colors-fuchsia-9:#701a75;--theme-ui-colors-pink-0:#fdf2f8;--theme-ui-colors-pink-1:#fce7f3;--theme-ui-colors-pink-2:#fbcfe8;--theme-ui-colors-pink-3:#f9a8d4;--theme-ui-colors-pink-4:#f472b6;--theme-ui-colors-pink-5:#ec4899;--theme-ui-colors-pink-6:#db2777;--theme-ui-colors-pink-7:#be185d;--theme-ui-colors-pink-8:#9d174d;--theme-ui-colors-pink-9:#831843;--theme-ui-colors-rose-0:#fff1f2;--theme-ui-colors-rose-1:#ffe4e6;--theme-ui-colors-rose-2:#fecdd3;--theme-ui-colors-rose-3:#fda4af;--theme-ui-colors-rose-4:#fb7185;--theme-ui-colors-rose-5:#f43f5e;--theme-ui-colors-rose-6:#e11d48;--theme-ui-colors-rose-7:#be123c;--theme-ui-colors-rose-8:#9f1239;--theme-ui-colors-rose-9:#881337;--theme-ui-colors-grayDark:#1f2937;--theme-ui-colors-text:#1f2937;--theme-ui-colors-background:#fff;--theme-ui-colors-primary:#1d4ed8;--theme-ui-colors-primaryHover:#1e40af;--theme-ui-colors-secondary:#4b5563;--theme-ui-colors-muted:#d1d5db;--theme-ui-colors-success:#86efac;--theme-ui-colors-info:#60a5fa;--theme-ui-colors-warning:#fde047;--theme-ui-colors-danger:#fca5a5;--theme-ui-colors-light:#f3f4f6;--theme-ui-colors-dark:#1f2937;--theme-ui-colors-textMuted:#4b5563;--theme-ui-colors-plain-color:#393A34;--theme-ui-colors-plain-backgroundColor:#f6f8fa;--theme-ui-colors-comment-color:#999988;--theme-ui-colors-comment-fontStyle:italic;--theme-ui-colors-prolog-color:#999988;--theme-ui-colors-prolog-fontStyle:italic;--theme-ui-colors-doctype-color:#999988;--theme-ui-colors-doctype-fontStyle:italic;--theme-ui-colors-cdata-color:#999988;--theme-ui-colors-cdata-fontStyle:italic;--theme-ui-colors-namespace-opacity:0.7;--theme-ui-colors-string-color:#e3116c;--theme-ui-colors-attr-value-color:#e3116c;--theme-ui-colors-punctuation-color:#393A34;--theme-ui-colors-operator-color:#393A34;--theme-ui-colors-entity-color:#36acaa;--theme-ui-colors-url-color:#36acaa;--theme-ui-colors-symbol-color:#36acaa;--theme-ui-colors-number-color:#36acaa;--theme-ui-colors-boolean-color:#36acaa;--theme-ui-colors-variable-color:#36acaa;--theme-ui-colors-constant-color:#36acaa;--theme-ui-colors-property-color:#36acaa;--theme-ui-colors-regex-color:#36acaa;--theme-ui-colors-inserted-color:#36acaa;--theme-ui-colors-atrule-color:#00a4db;--theme-ui-colors-keyword-color:#00009f;--theme-ui-colors-attr-name-color:#00a4db;--theme-ui-colors-selector-color:#00009f;--theme-ui-colors-function-color:#d73a49;--theme-ui-colors-deleted-color:#d73a49;--theme-ui-colors-tag-color:#00009f;--theme-ui-colors-function-variable-color:#6f42c1;--theme-ui-colors-toggleIcon:#1f2937;--theme-ui-colors-heading:#000;--theme-ui-colors-highlight:#28292a;color:var(--theme-ui-colors-text);background-color:var(--theme-ui-colors-background);}html.theme-ui-__default,.theme-ui-__default html{--theme-ui-colors-transparent:transparent;--theme-ui-colors-black:#000;--theme-ui-colors-white:#fff;--theme-ui-colors-slate-0:#f8fafc;--theme-ui-colors-slate-1:#f1f5f9;--theme-ui-colors-slate-2:#e2e8f0;--theme-ui-colors-slate-3:#cbd5e1;--theme-ui-colors-slate-4:#94a3b8;--theme-ui-colors-slate-5:#64748b;--theme-ui-colors-slate-6:#475569;--theme-ui-colors-slate-7:#334155;--theme-ui-colors-slate-8:#1e293b;--theme-ui-colors-slate-9:#0f172a;--theme-ui-colors-gray-0:#f9fafb;--theme-ui-colors-gray-1:#f3f4f6;--theme-ui-colors-gray-2:#e5e7eb;--theme-ui-colors-gray-3:#d1d5db;--theme-ui-colors-gray-4:#9ca3af;--theme-ui-colors-gray-5:#6b7280;--theme-ui-colors-gray-6:#4b5563;--theme-ui-colors-gray-7:#374151;--theme-ui-colors-gray-8:#1f2937;--theme-ui-colors-gray-9:#111827;--theme-ui-colors-zinc-0:#fafafa;--theme-ui-colors-zinc-1:#f4f4f5;--theme-ui-colors-zinc-2:#e4e4e7;--theme-ui-colors-zinc-3:#d4d4d8;--theme-ui-colors-zinc-4:#a1a1aa;--theme-ui-colors-zinc-5:#71717a;--theme-ui-colors-zinc-6:#52525b;--theme-ui-colors-zinc-7:#3f3f46;--theme-ui-colors-zinc-8:#27272a;--theme-ui-colors-zinc-9:#18181b;--theme-ui-colors-neutral-0:#fafafa;--theme-ui-colors-neutral-1:#f5f5f5;--theme-ui-colors-neutral-2:#e5e5e5;--theme-ui-colors-neutral-3:#d4d4d4;--theme-ui-colors-neutral-4:#a3a3a3;--theme-ui-colors-neutral-5:#737373;--theme-ui-colors-neutral-6:#525252;--theme-ui-colors-neutral-7:#404040;--theme-ui-colors-neutral-8:#262626;--theme-ui-colors-neutral-9:#171717;--theme-ui-colors-stone-0:#fafaf9;--theme-ui-colors-stone-1:#f5f5f4;--theme-ui-colors-stone-2:#e7e5e4;--theme-ui-colors-stone-3:#d6d3d1;--theme-ui-colors-stone-4:#a8a29e;--theme-ui-colors-stone-5:#78716c;--theme-ui-colors-stone-6:#57534e;--theme-ui-colors-stone-7:#44403c;--theme-ui-colors-stone-8:#292524;--theme-ui-colors-stone-9:#1c1917;--theme-ui-colors-red-0:#fef2f2;--theme-ui-colors-red-1:#fee2e2;--theme-ui-colors-red-2:#fecaca;--theme-ui-colors-red-3:#fca5a5;--theme-ui-colors-red-4:#f87171;--theme-ui-colors-red-5:#ef4444;--theme-ui-colors-red-6:#dc2626;--theme-ui-colors-red-7:#b91c1c;--theme-ui-colors-red-8:#991b1b;--theme-ui-colors-red-9:#7f1d1d;--theme-ui-colors-orange-0:#fff7ed;--theme-ui-colors-orange-1:#ffedd5;--theme-ui-colors-orange-2:#fed7aa;--theme-ui-colors-orange-3:#fdba74;--theme-ui-colors-orange-4:#fb923c;--theme-ui-colors-orange-5:#f97316;--theme-ui-colors-orange-6:#ea580c;--theme-ui-colors-orange-7:#c2410c;--theme-ui-colors-orange-8:#9a3412;--theme-ui-colors-orange-9:#7c2d12;--theme-ui-colors-amber-0:#fffbeb;--theme-ui-colors-amber-1:#fef3c7;--theme-ui-colors-amber-2:#fde68a;--theme-ui-colors-amber-3:#fcd34d;--theme-ui-colors-amber-4:#fbbf24;--theme-ui-colors-amber-5:#f59e0b;--theme-ui-colors-amber-6:#d97706;--theme-ui-colors-amber-7:#b45309;--theme-ui-colors-amber-8:#92400e;--theme-ui-colors-amber-9:#78350f;--theme-ui-colors-yellow-0:#fefce8;--theme-ui-colors-yellow-1:#fef9c3;--theme-ui-colors-yellow-2:#fef08a;--theme-ui-colors-yellow-3:#fde047;--theme-ui-colors-yellow-4:#facc15;--theme-ui-colors-yellow-5:#eab308;--theme-ui-colors-yellow-6:#ca8a04;--theme-ui-colors-yellow-7:#a16207;--theme-ui-colors-yellow-8:#854d0e;--theme-ui-colors-yellow-9:#713f12;--theme-ui-colors-lime-0:#f7fee7;--theme-ui-colors-lime-1:#ecfccb;--theme-ui-colors-lime-2:#d9f99d;--theme-ui-colors-lime-3:#bef264;--theme-ui-colors-lime-4:#a3e635;--theme-ui-colors-lime-5:#84cc16;--theme-ui-colors-lime-6:#65a30d;--theme-ui-colors-lime-7:#4d7c0f;--theme-ui-colors-lime-8:#3f6212;--theme-ui-colors-lime-9:#365314;--theme-ui-colors-green-0:#f0fdf4;--theme-ui-colors-green-1:#dcfce7;--theme-ui-colors-green-2:#bbf7d0;--theme-ui-colors-green-3:#86efac;--theme-ui-colors-green-4:#4ade80;--theme-ui-colors-green-5:#22c55e;--theme-ui-colors-green-6:#16a34a;--theme-ui-colors-green-7:#15803d;--theme-ui-colors-green-8:#166534;--theme-ui-colors-green-9:#14532d;--theme-ui-colors-emerald-0:#ecfdf5;--theme-ui-colors-emerald-1:#d1fae5;--theme-ui-colors-emerald-2:#a7f3d0;--theme-ui-colors-emerald-3:#6ee7b7;--theme-ui-colors-emerald-4:#34d399;--theme-ui-colors-emerald-5:#10b981;--theme-ui-colors-emerald-6:#059669;--theme-ui-colors-emerald-7:#047857;--theme-ui-colors-emerald-8:#065f46;--theme-ui-colors-emerald-9:#064e3b;--theme-ui-colors-teal-0:#f0fdfa;--theme-ui-colors-teal-1:#ccfbf1;--theme-ui-colors-teal-2:#99f6e4;--theme-ui-colors-teal-3:#5eead4;--theme-ui-colors-teal-4:#2dd4bf;--theme-ui-colors-teal-5:#14b8a6;--theme-ui-colors-teal-6:#0d9488;--theme-ui-colors-teal-7:#0f766e;--theme-ui-colors-teal-8:#115e59;--theme-ui-colors-teal-9:#134e4a;--theme-ui-colors-cyan-0:#ecfeff;--theme-ui-colors-cyan-1:#cffafe;--theme-ui-colors-cyan-2:#a5f3fc;--theme-ui-colors-cyan-3:#67e8f9;--theme-ui-colors-cyan-4:#22d3ee;--theme-ui-colors-cyan-5:#06b6d4;--theme-ui-colors-cyan-6:#0891b2;--theme-ui-colors-cyan-7:#0e7490;--theme-ui-colors-cyan-8:#155e75;--theme-ui-colors-cyan-9:#164e63;--theme-ui-colors-sky-0:#f0f9ff;--theme-ui-colors-sky-1:#e0f2fe;--theme-ui-colors-sky-2:#bae6fd;--theme-ui-colors-sky-3:#7dd3fc;--theme-ui-colors-sky-4:#38bdf8;--theme-ui-colors-sky-5:#0ea5e9;--theme-ui-colors-sky-6:#0284c7;--theme-ui-colors-sky-7:#0369a1;--theme-ui-colors-sky-8:#075985;--theme-ui-colors-sky-9:#0c4a6e;--theme-ui-colors-blue-0:#eff6ff;--theme-ui-colors-blue-1:#dbeafe;--theme-ui-colors-blue-2:#bfdbfe;--theme-ui-colors-blue-3:#93c5fd;--theme-ui-colors-blue-4:#60a5fa;--theme-ui-colors-blue-5:#3b82f6;--theme-ui-colors-blue-6:#2563eb;--theme-ui-colors-blue-7:#1d4ed8;--theme-ui-colors-blue-8:#1e40af;--theme-ui-colors-blue-9:#1e3a8a;--theme-ui-colors-indigo-0:#eef2ff;--theme-ui-colors-indigo-1:#e0e7ff;--theme-ui-colors-indigo-2:#c7d2fe;--theme-ui-colors-indigo-3:#a5b4fc;--theme-ui-colors-indigo-4:#818cf8;--theme-ui-colors-indigo-5:#6366f1;--theme-ui-colors-indigo-6:#4f46e5;--theme-ui-colors-indigo-7:#4338ca;--theme-ui-colors-indigo-8:#3730a3;--theme-ui-colors-indigo-9:#312e81;--theme-ui-colors-violet-0:#f5f3ff;--theme-ui-colors-violet-1:#ede9fe;--theme-ui-colors-violet-2:#ddd6fe;--theme-ui-colors-violet-3:#c4b5fd;--theme-ui-colors-violet-4:#a78bfa;--theme-ui-colors-violet-5:#8b5cf6;--theme-ui-colors-violet-6:#7c3aed;--theme-ui-colors-violet-7:#6d28d9;--theme-ui-colors-violet-8:#5b21b6;--theme-ui-colors-violet-9:#4c1d95;--theme-ui-colors-purple-0:#faf5ff;--theme-ui-colors-purple-1:#f3e8ff;--theme-ui-colors-purple-2:#e9d5ff;--theme-ui-colors-purple-3:#d8b4fe;--theme-ui-colors-purple-4:#c084fc;--theme-ui-colors-purple-5:#a855f7;--theme-ui-colors-purple-6:#9333ea;--theme-ui-colors-purple-7:#7e22ce;--theme-ui-colors-purple-8:#6b21a8;--theme-ui-colors-purple-9:#581c87;--theme-ui-colors-fuchsia-0:#fdf4ff;--theme-ui-colors-fuchsia-1:#fae8ff;--theme-ui-colors-fuchsia-2:#f5d0fe;--theme-ui-colors-fuchsia-3:#f0abfc;--theme-ui-colors-fuchsia-4:#e879f9;--theme-ui-colors-fuchsia-5:#d946ef;--theme-ui-colors-fuchsia-6:#c026d3;--theme-ui-colors-fuchsia-7:#a21caf;--theme-ui-colors-fuchsia-8:#86198f;--theme-ui-colors-fuchsia-9:#701a75;--theme-ui-colors-pink-0:#fdf2f8;--theme-ui-colors-pink-1:#fce7f3;--theme-ui-colors-pink-2:#fbcfe8;--theme-ui-colors-pink-3:#f9a8d4;--theme-ui-colors-pink-4:#f472b6;--theme-ui-colors-pink-5:#ec4899;--theme-ui-colors-pink-6:#db2777;--theme-ui-colors-pink-7:#be185d;--theme-ui-colors-pink-8:#9d174d;--theme-ui-colors-pink-9:#831843;--theme-ui-colors-rose-0:#fff1f2;--theme-ui-colors-rose-1:#ffe4e6;--theme-ui-colors-rose-2:#fecdd3;--theme-ui-colors-rose-3:#fda4af;--theme-ui-colors-rose-4:#fb7185;--theme-ui-colors-rose-5:#f43f5e;--theme-ui-colors-rose-6:#e11d48;--theme-ui-colors-rose-7:#be123c;--theme-ui-colors-rose-8:#9f1239;--theme-ui-colors-rose-9:#881337;--theme-ui-colors-grayDark:#1f2937;--theme-ui-colors-text:#1f2937;--theme-ui-colors-background:#fff;--theme-ui-colors-primary:#1d4ed8;--theme-ui-colors-primaryHover:#1e40af;--theme-ui-colors-secondary:#4b5563;--theme-ui-colors-muted:#d1d5db;--theme-ui-colors-success:#86efac;--theme-ui-colors-info:#60a5fa;--theme-ui-colors-warning:#fde047;--theme-ui-colors-danger:#fca5a5;--theme-ui-colors-light:#f3f4f6;--theme-ui-colors-dark:#1f2937;--theme-ui-colors-textMuted:#4b5563;--theme-ui-colors-plain-color:#393A34;--theme-ui-colors-plain-backgroundColor:#f6f8fa;--theme-ui-colors-comment-color:#999988;--theme-ui-colors-comment-fontStyle:italic;--theme-ui-colors-prolog-color:#999988;--theme-ui-colors-prolog-fontStyle:italic;--theme-ui-colors-doctype-color:#999988;--theme-ui-colors-doctype-fontStyle:italic;--theme-ui-colors-cdata-color:#999988;--theme-ui-colors-cdata-fontStyle:italic;--theme-ui-colors-namespace-opacity:0.7;--theme-ui-colors-string-color:#e3116c;--theme-ui-colors-attr-value-color:#e3116c;--theme-ui-colors-punctuation-color:#393A34;--theme-ui-colors-operator-color:#393A34;--theme-ui-colors-entity-color:#36acaa;--theme-ui-colors-url-color:#36acaa;--theme-ui-colors-symbol-color:#36acaa;--theme-ui-colors-number-color:#36acaa;--theme-ui-colors-boolean-color:#36acaa;--theme-ui-colors-variable-color:#36acaa;--theme-ui-colors-constant-color:#36acaa;--theme-ui-colors-property-color:#36acaa;--theme-ui-colors-regex-color:#36acaa;--theme-ui-colors-inserted-color:#36acaa;--theme-ui-colors-atrule-color:#00a4db;--theme-ui-colors-keyword-color:#00009f;--theme-ui-colors-attr-name-color:#00a4db;--theme-ui-colors-selector-color:#00009f;--theme-ui-colors-function-color:#d73a49;--theme-ui-colors-deleted-color:#d73a49;--theme-ui-colors-tag-color:#00009f;--theme-ui-colors-function-variable-color:#6f42c1;--theme-ui-colors-toggleIcon:#1f2937;--theme-ui-colors-heading:#000;--theme-ui-colors-highlight:#28292a;}html.theme-ui-dark,.theme-ui-dark html{--theme-ui-colors-plain-color:#9CDCFE;--theme-ui-colors-plain-backgroundColor:#28292a;--theme-ui-colors-prolog-color:rgb(0, 0, 128);--theme-ui-colors-comment-color:rgb(106, 153, 85);--theme-ui-colors-builtin-color:rgb(86, 156, 214);--theme-ui-colors-changed-color:rgb(86, 156, 214);--theme-ui-colors-keyword-color:rgb(86, 156, 214);--theme-ui-colors-interpolation-punctuation-color:rgb(86, 156, 214);--theme-ui-colors-number-color:rgb(181, 206, 168);--theme-ui-colors-inserted-color:rgb(181, 206, 168);--theme-ui-colors-constant-color:rgb(100, 102, 149);--theme-ui-colors-attr-name-color:rgb(156, 220, 254);--theme-ui-colors-variable-color:rgb(156, 220, 254);--theme-ui-colors-deleted-color:rgb(206, 145, 120);--theme-ui-colors-string-color:rgb(206, 145, 120);--theme-ui-colors-attr-value-color:rgb(206, 145, 120);--theme-ui-colors-template-punctuation-color:rgb(206, 145, 120);--theme-ui-colors-selector-color:rgb(215, 186, 125);--theme-ui-colors-tag-color:rgb(86, 156, 214);--theme-ui-colors-punctuation-color:#808080;--theme-ui-colors-operator-color:rgb(212, 212, 212);--theme-ui-colors-function-color:rgb(220, 220, 170);--theme-ui-colors-class-name-color:rgb(78, 201, 176);--theme-ui-colors-char-color:rgb(209, 105, 105);--theme-ui-colors-highlight:#28292a;--theme-ui-colors-text:#e3e3e3;--theme-ui-colors-primary:#c084fc;--theme-ui-colors-secondary:#8a9ab0;--theme-ui-colors-toggleIcon:#9ca3af;--theme-ui-colors-heading:#fff;--theme-ui-colors-divide:#1f2937;--theme-ui-colors-muted:#1f2937;--theme-ui-colors-highlightLineBg:rgba(255, 255, 255, 0.1);--theme-ui-colors-background:#1f1f1f;}html.theme-ui-light,.theme-ui-light html{--theme-ui-colors-plain-color:#393A34;--theme-ui-colors-plain-backgroundColor:#f8fafd;--theme-ui-colors-comment-color:#999988;--theme-ui-colors-comment-fontStyle:italic;--theme-ui-colors-prolog-color:#999988;--theme-ui-colors-prolog-fontStyle:italic;--theme-ui-colors-doctype-color:#999988;--theme-ui-colors-doctype-fontStyle:italic;--theme-ui-colors-cdata-color:#999988;--theme-ui-colors-cdata-fontStyle:italic;--theme-ui-colors-namespace-opacity:0.7;--theme-ui-colors-string-color:#e3116c;--theme-ui-colors-attr-value-color:#e3116c;--theme-ui-colors-punctuation-color:#393A34;--theme-ui-colors-operator-color:#393A34;--theme-ui-colors-entity-color:#36acaa;--theme-ui-colors-url-color:#36acaa;--theme-ui-colors-symbol-color:#36acaa;--theme-ui-colors-number-color:#36acaa;--theme-ui-colors-boolean-color:#36acaa;--theme-ui-colors-variable-color:#36acaa;--theme-ui-colors-constant-color:#36acaa;--theme-ui-colors-property-color:#36acaa;--theme-ui-colors-regex-color:#36acaa;--theme-ui-colors-inserted-color:#36acaa;--theme-ui-colors-atrule-color:#00a4db;--theme-ui-colors-keyword-color:#00009f;--theme-ui-colors-attr-name-color:#00a4db;--theme-ui-colors-selector-color:#00009f;--theme-ui-colors-function-color:#d73a49;--theme-ui-colors-deleted-color:#d73a49;--theme-ui-colors-tag-color:#00009f;--theme-ui-colors-function-variable-color:#6f42c1;--theme-ui-colors-highlight:#e2e8f0;--theme-ui-colors-text:#000;--theme-ui-colors-primary:#7e22ce;--theme-ui-colors-secondary:#5f6c80;--theme-ui-colors-toggleIcon:#1f2937;--theme-ui-colors-heading:#000;--theme-ui-colors-divide:#9ca3af;--theme-ui-colors-muted:#e5e7eb;--theme-ui-colors-highlightLineBg:rgba(0, 0, 0, 0.035);--theme-ui-colors-background:#fff;}</style><style data-emotion="css-global oiq1hr" data-gatsby-head="true">*{box-sizing:border-box;}html{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";line-height:1.625;font-weight:400;color:var(--theme-ui-colors-text);background-color:var(--theme-ui-colors-background);margin:0;padding:0;box-sizing:border-box;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%;}html img{border-style:none;}html pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;}html a{-webkit-transition:all 0.3s ease-in-out;transition:all 0.3s ease-in-out;color:var(--theme-ui-colors-text);}body{margin:0;}</style><title data-gatsby-head="true">Flink基本知识 | MQ Blog</title><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" data-gatsby-head="true"/><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" data-gatsby-head="true"/><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" data-gatsby-head="true"/></head><body><script>(function() { try {
  var mode = localStorage.getItem('theme-ui-color-mode');
  if (!mode) return
  document.documentElement.classList.add('theme-ui-' + mode);
} catch (e) {} })();</script><div id="___gatsby"><style data-emotion="css-global 1bif9id">html{--theme-ui-colors-transparent:transparent;--theme-ui-colors-black:#000;--theme-ui-colors-white:#fff;--theme-ui-colors-slate-0:#f8fafc;--theme-ui-colors-slate-1:#f1f5f9;--theme-ui-colors-slate-2:#e2e8f0;--theme-ui-colors-slate-3:#cbd5e1;--theme-ui-colors-slate-4:#94a3b8;--theme-ui-colors-slate-5:#64748b;--theme-ui-colors-slate-6:#475569;--theme-ui-colors-slate-7:#334155;--theme-ui-colors-slate-8:#1e293b;--theme-ui-colors-slate-9:#0f172a;--theme-ui-colors-gray-0:#f9fafb;--theme-ui-colors-gray-1:#f3f4f6;--theme-ui-colors-gray-2:#e5e7eb;--theme-ui-colors-gray-3:#d1d5db;--theme-ui-colors-gray-4:#9ca3af;--theme-ui-colors-gray-5:#6b7280;--theme-ui-colors-gray-6:#4b5563;--theme-ui-colors-gray-7:#374151;--theme-ui-colors-gray-8:#1f2937;--theme-ui-colors-gray-9:#111827;--theme-ui-colors-zinc-0:#fafafa;--theme-ui-colors-zinc-1:#f4f4f5;--theme-ui-colors-zinc-2:#e4e4e7;--theme-ui-colors-zinc-3:#d4d4d8;--theme-ui-colors-zinc-4:#a1a1aa;--theme-ui-colors-zinc-5:#71717a;--theme-ui-colors-zinc-6:#52525b;--theme-ui-colors-zinc-7:#3f3f46;--theme-ui-colors-zinc-8:#27272a;--theme-ui-colors-zinc-9:#18181b;--theme-ui-colors-neutral-0:#fafafa;--theme-ui-colors-neutral-1:#f5f5f5;--theme-ui-colors-neutral-2:#e5e5e5;--theme-ui-colors-neutral-3:#d4d4d4;--theme-ui-colors-neutral-4:#a3a3a3;--theme-ui-colors-neutral-5:#737373;--theme-ui-colors-neutral-6:#525252;--theme-ui-colors-neutral-7:#404040;--theme-ui-colors-neutral-8:#262626;--theme-ui-colors-neutral-9:#171717;--theme-ui-colors-stone-0:#fafaf9;--theme-ui-colors-stone-1:#f5f5f4;--theme-ui-colors-stone-2:#e7e5e4;--theme-ui-colors-stone-3:#d6d3d1;--theme-ui-colors-stone-4:#a8a29e;--theme-ui-colors-stone-5:#78716c;--theme-ui-colors-stone-6:#57534e;--theme-ui-colors-stone-7:#44403c;--theme-ui-colors-stone-8:#292524;--theme-ui-colors-stone-9:#1c1917;--theme-ui-colors-red-0:#fef2f2;--theme-ui-colors-red-1:#fee2e2;--theme-ui-colors-red-2:#fecaca;--theme-ui-colors-red-3:#fca5a5;--theme-ui-colors-red-4:#f87171;--theme-ui-colors-red-5:#ef4444;--theme-ui-colors-red-6:#dc2626;--theme-ui-colors-red-7:#b91c1c;--theme-ui-colors-red-8:#991b1b;--theme-ui-colors-red-9:#7f1d1d;--theme-ui-colors-orange-0:#fff7ed;--theme-ui-colors-orange-1:#ffedd5;--theme-ui-colors-orange-2:#fed7aa;--theme-ui-colors-orange-3:#fdba74;--theme-ui-colors-orange-4:#fb923c;--theme-ui-colors-orange-5:#f97316;--theme-ui-colors-orange-6:#ea580c;--theme-ui-colors-orange-7:#c2410c;--theme-ui-colors-orange-8:#9a3412;--theme-ui-colors-orange-9:#7c2d12;--theme-ui-colors-amber-0:#fffbeb;--theme-ui-colors-amber-1:#fef3c7;--theme-ui-colors-amber-2:#fde68a;--theme-ui-colors-amber-3:#fcd34d;--theme-ui-colors-amber-4:#fbbf24;--theme-ui-colors-amber-5:#f59e0b;--theme-ui-colors-amber-6:#d97706;--theme-ui-colors-amber-7:#b45309;--theme-ui-colors-amber-8:#92400e;--theme-ui-colors-amber-9:#78350f;--theme-ui-colors-yellow-0:#fefce8;--theme-ui-colors-yellow-1:#fef9c3;--theme-ui-colors-yellow-2:#fef08a;--theme-ui-colors-yellow-3:#fde047;--theme-ui-colors-yellow-4:#facc15;--theme-ui-colors-yellow-5:#eab308;--theme-ui-colors-yellow-6:#ca8a04;--theme-ui-colors-yellow-7:#a16207;--theme-ui-colors-yellow-8:#854d0e;--theme-ui-colors-yellow-9:#713f12;--theme-ui-colors-lime-0:#f7fee7;--theme-ui-colors-lime-1:#ecfccb;--theme-ui-colors-lime-2:#d9f99d;--theme-ui-colors-lime-3:#bef264;--theme-ui-colors-lime-4:#a3e635;--theme-ui-colors-lime-5:#84cc16;--theme-ui-colors-lime-6:#65a30d;--theme-ui-colors-lime-7:#4d7c0f;--theme-ui-colors-lime-8:#3f6212;--theme-ui-colors-lime-9:#365314;--theme-ui-colors-green-0:#f0fdf4;--theme-ui-colors-green-1:#dcfce7;--theme-ui-colors-green-2:#bbf7d0;--theme-ui-colors-green-3:#86efac;--theme-ui-colors-green-4:#4ade80;--theme-ui-colors-green-5:#22c55e;--theme-ui-colors-green-6:#16a34a;--theme-ui-colors-green-7:#15803d;--theme-ui-colors-green-8:#166534;--theme-ui-colors-green-9:#14532d;--theme-ui-colors-emerald-0:#ecfdf5;--theme-ui-colors-emerald-1:#d1fae5;--theme-ui-colors-emerald-2:#a7f3d0;--theme-ui-colors-emerald-3:#6ee7b7;--theme-ui-colors-emerald-4:#34d399;--theme-ui-colors-emerald-5:#10b981;--theme-ui-colors-emerald-6:#059669;--theme-ui-colors-emerald-7:#047857;--theme-ui-colors-emerald-8:#065f46;--theme-ui-colors-emerald-9:#064e3b;--theme-ui-colors-teal-0:#f0fdfa;--theme-ui-colors-teal-1:#ccfbf1;--theme-ui-colors-teal-2:#99f6e4;--theme-ui-colors-teal-3:#5eead4;--theme-ui-colors-teal-4:#2dd4bf;--theme-ui-colors-teal-5:#14b8a6;--theme-ui-colors-teal-6:#0d9488;--theme-ui-colors-teal-7:#0f766e;--theme-ui-colors-teal-8:#115e59;--theme-ui-colors-teal-9:#134e4a;--theme-ui-colors-cyan-0:#ecfeff;--theme-ui-colors-cyan-1:#cffafe;--theme-ui-colors-cyan-2:#a5f3fc;--theme-ui-colors-cyan-3:#67e8f9;--theme-ui-colors-cyan-4:#22d3ee;--theme-ui-colors-cyan-5:#06b6d4;--theme-ui-colors-cyan-6:#0891b2;--theme-ui-colors-cyan-7:#0e7490;--theme-ui-colors-cyan-8:#155e75;--theme-ui-colors-cyan-9:#164e63;--theme-ui-colors-sky-0:#f0f9ff;--theme-ui-colors-sky-1:#e0f2fe;--theme-ui-colors-sky-2:#bae6fd;--theme-ui-colors-sky-3:#7dd3fc;--theme-ui-colors-sky-4:#38bdf8;--theme-ui-colors-sky-5:#0ea5e9;--theme-ui-colors-sky-6:#0284c7;--theme-ui-colors-sky-7:#0369a1;--theme-ui-colors-sky-8:#075985;--theme-ui-colors-sky-9:#0c4a6e;--theme-ui-colors-blue-0:#eff6ff;--theme-ui-colors-blue-1:#dbeafe;--theme-ui-colors-blue-2:#bfdbfe;--theme-ui-colors-blue-3:#93c5fd;--theme-ui-colors-blue-4:#60a5fa;--theme-ui-colors-blue-5:#3b82f6;--theme-ui-colors-blue-6:#2563eb;--theme-ui-colors-blue-7:#1d4ed8;--theme-ui-colors-blue-8:#1e40af;--theme-ui-colors-blue-9:#1e3a8a;--theme-ui-colors-indigo-0:#eef2ff;--theme-ui-colors-indigo-1:#e0e7ff;--theme-ui-colors-indigo-2:#c7d2fe;--theme-ui-colors-indigo-3:#a5b4fc;--theme-ui-colors-indigo-4:#818cf8;--theme-ui-colors-indigo-5:#6366f1;--theme-ui-colors-indigo-6:#4f46e5;--theme-ui-colors-indigo-7:#4338ca;--theme-ui-colors-indigo-8:#3730a3;--theme-ui-colors-indigo-9:#312e81;--theme-ui-colors-violet-0:#f5f3ff;--theme-ui-colors-violet-1:#ede9fe;--theme-ui-colors-violet-2:#ddd6fe;--theme-ui-colors-violet-3:#c4b5fd;--theme-ui-colors-violet-4:#a78bfa;--theme-ui-colors-violet-5:#8b5cf6;--theme-ui-colors-violet-6:#7c3aed;--theme-ui-colors-violet-7:#6d28d9;--theme-ui-colors-violet-8:#5b21b6;--theme-ui-colors-violet-9:#4c1d95;--theme-ui-colors-purple-0:#faf5ff;--theme-ui-colors-purple-1:#f3e8ff;--theme-ui-colors-purple-2:#e9d5ff;--theme-ui-colors-purple-3:#d8b4fe;--theme-ui-colors-purple-4:#c084fc;--theme-ui-colors-purple-5:#a855f7;--theme-ui-colors-purple-6:#9333ea;--theme-ui-colors-purple-7:#7e22ce;--theme-ui-colors-purple-8:#6b21a8;--theme-ui-colors-purple-9:#581c87;--theme-ui-colors-fuchsia-0:#fdf4ff;--theme-ui-colors-fuchsia-1:#fae8ff;--theme-ui-colors-fuchsia-2:#f5d0fe;--theme-ui-colors-fuchsia-3:#f0abfc;--theme-ui-colors-fuchsia-4:#e879f9;--theme-ui-colors-fuchsia-5:#d946ef;--theme-ui-colors-fuchsia-6:#c026d3;--theme-ui-colors-fuchsia-7:#a21caf;--theme-ui-colors-fuchsia-8:#86198f;--theme-ui-colors-fuchsia-9:#701a75;--theme-ui-colors-pink-0:#fdf2f8;--theme-ui-colors-pink-1:#fce7f3;--theme-ui-colors-pink-2:#fbcfe8;--theme-ui-colors-pink-3:#f9a8d4;--theme-ui-colors-pink-4:#f472b6;--theme-ui-colors-pink-5:#ec4899;--theme-ui-colors-pink-6:#db2777;--theme-ui-colors-pink-7:#be185d;--theme-ui-colors-pink-8:#9d174d;--theme-ui-colors-pink-9:#831843;--theme-ui-colors-rose-0:#fff1f2;--theme-ui-colors-rose-1:#ffe4e6;--theme-ui-colors-rose-2:#fecdd3;--theme-ui-colors-rose-3:#fda4af;--theme-ui-colors-rose-4:#fb7185;--theme-ui-colors-rose-5:#f43f5e;--theme-ui-colors-rose-6:#e11d48;--theme-ui-colors-rose-7:#be123c;--theme-ui-colors-rose-8:#9f1239;--theme-ui-colors-rose-9:#881337;--theme-ui-colors-grayDark:#1f2937;--theme-ui-colors-text:#1f2937;--theme-ui-colors-background:#fff;--theme-ui-colors-primary:#1d4ed8;--theme-ui-colors-primaryHover:#1e40af;--theme-ui-colors-secondary:#4b5563;--theme-ui-colors-muted:#d1d5db;--theme-ui-colors-success:#86efac;--theme-ui-colors-info:#60a5fa;--theme-ui-colors-warning:#fde047;--theme-ui-colors-danger:#fca5a5;--theme-ui-colors-light:#f3f4f6;--theme-ui-colors-dark:#1f2937;--theme-ui-colors-textMuted:#4b5563;--theme-ui-colors-plain-color:#393A34;--theme-ui-colors-plain-backgroundColor:#f6f8fa;--theme-ui-colors-comment-color:#999988;--theme-ui-colors-comment-fontStyle:italic;--theme-ui-colors-prolog-color:#999988;--theme-ui-colors-prolog-fontStyle:italic;--theme-ui-colors-doctype-color:#999988;--theme-ui-colors-doctype-fontStyle:italic;--theme-ui-colors-cdata-color:#999988;--theme-ui-colors-cdata-fontStyle:italic;--theme-ui-colors-namespace-opacity:0.7;--theme-ui-colors-string-color:#e3116c;--theme-ui-colors-attr-value-color:#e3116c;--theme-ui-colors-punctuation-color:#393A34;--theme-ui-colors-operator-color:#393A34;--theme-ui-colors-entity-color:#36acaa;--theme-ui-colors-url-color:#36acaa;--theme-ui-colors-symbol-color:#36acaa;--theme-ui-colors-number-color:#36acaa;--theme-ui-colors-boolean-color:#36acaa;--theme-ui-colors-variable-color:#36acaa;--theme-ui-colors-constant-color:#36acaa;--theme-ui-colors-property-color:#36acaa;--theme-ui-colors-regex-color:#36acaa;--theme-ui-colors-inserted-color:#36acaa;--theme-ui-colors-atrule-color:#00a4db;--theme-ui-colors-keyword-color:#00009f;--theme-ui-colors-attr-name-color:#00a4db;--theme-ui-colors-selector-color:#00009f;--theme-ui-colors-function-color:#d73a49;--theme-ui-colors-deleted-color:#d73a49;--theme-ui-colors-tag-color:#00009f;--theme-ui-colors-function-variable-color:#6f42c1;--theme-ui-colors-toggleIcon:#1f2937;--theme-ui-colors-heading:#000;--theme-ui-colors-highlight:#28292a;color:var(--theme-ui-colors-text);background-color:var(--theme-ui-colors-background);}html.theme-ui-__default,.theme-ui-__default html{--theme-ui-colors-transparent:transparent;--theme-ui-colors-black:#000;--theme-ui-colors-white:#fff;--theme-ui-colors-slate-0:#f8fafc;--theme-ui-colors-slate-1:#f1f5f9;--theme-ui-colors-slate-2:#e2e8f0;--theme-ui-colors-slate-3:#cbd5e1;--theme-ui-colors-slate-4:#94a3b8;--theme-ui-colors-slate-5:#64748b;--theme-ui-colors-slate-6:#475569;--theme-ui-colors-slate-7:#334155;--theme-ui-colors-slate-8:#1e293b;--theme-ui-colors-slate-9:#0f172a;--theme-ui-colors-gray-0:#f9fafb;--theme-ui-colors-gray-1:#f3f4f6;--theme-ui-colors-gray-2:#e5e7eb;--theme-ui-colors-gray-3:#d1d5db;--theme-ui-colors-gray-4:#9ca3af;--theme-ui-colors-gray-5:#6b7280;--theme-ui-colors-gray-6:#4b5563;--theme-ui-colors-gray-7:#374151;--theme-ui-colors-gray-8:#1f2937;--theme-ui-colors-gray-9:#111827;--theme-ui-colors-zinc-0:#fafafa;--theme-ui-colors-zinc-1:#f4f4f5;--theme-ui-colors-zinc-2:#e4e4e7;--theme-ui-colors-zinc-3:#d4d4d8;--theme-ui-colors-zinc-4:#a1a1aa;--theme-ui-colors-zinc-5:#71717a;--theme-ui-colors-zinc-6:#52525b;--theme-ui-colors-zinc-7:#3f3f46;--theme-ui-colors-zinc-8:#27272a;--theme-ui-colors-zinc-9:#18181b;--theme-ui-colors-neutral-0:#fafafa;--theme-ui-colors-neutral-1:#f5f5f5;--theme-ui-colors-neutral-2:#e5e5e5;--theme-ui-colors-neutral-3:#d4d4d4;--theme-ui-colors-neutral-4:#a3a3a3;--theme-ui-colors-neutral-5:#737373;--theme-ui-colors-neutral-6:#525252;--theme-ui-colors-neutral-7:#404040;--theme-ui-colors-neutral-8:#262626;--theme-ui-colors-neutral-9:#171717;--theme-ui-colors-stone-0:#fafaf9;--theme-ui-colors-stone-1:#f5f5f4;--theme-ui-colors-stone-2:#e7e5e4;--theme-ui-colors-stone-3:#d6d3d1;--theme-ui-colors-stone-4:#a8a29e;--theme-ui-colors-stone-5:#78716c;--theme-ui-colors-stone-6:#57534e;--theme-ui-colors-stone-7:#44403c;--theme-ui-colors-stone-8:#292524;--theme-ui-colors-stone-9:#1c1917;--theme-ui-colors-red-0:#fef2f2;--theme-ui-colors-red-1:#fee2e2;--theme-ui-colors-red-2:#fecaca;--theme-ui-colors-red-3:#fca5a5;--theme-ui-colors-red-4:#f87171;--theme-ui-colors-red-5:#ef4444;--theme-ui-colors-red-6:#dc2626;--theme-ui-colors-red-7:#b91c1c;--theme-ui-colors-red-8:#991b1b;--theme-ui-colors-red-9:#7f1d1d;--theme-ui-colors-orange-0:#fff7ed;--theme-ui-colors-orange-1:#ffedd5;--theme-ui-colors-orange-2:#fed7aa;--theme-ui-colors-orange-3:#fdba74;--theme-ui-colors-orange-4:#fb923c;--theme-ui-colors-orange-5:#f97316;--theme-ui-colors-orange-6:#ea580c;--theme-ui-colors-orange-7:#c2410c;--theme-ui-colors-orange-8:#9a3412;--theme-ui-colors-orange-9:#7c2d12;--theme-ui-colors-amber-0:#fffbeb;--theme-ui-colors-amber-1:#fef3c7;--theme-ui-colors-amber-2:#fde68a;--theme-ui-colors-amber-3:#fcd34d;--theme-ui-colors-amber-4:#fbbf24;--theme-ui-colors-amber-5:#f59e0b;--theme-ui-colors-amber-6:#d97706;--theme-ui-colors-amber-7:#b45309;--theme-ui-colors-amber-8:#92400e;--theme-ui-colors-amber-9:#78350f;--theme-ui-colors-yellow-0:#fefce8;--theme-ui-colors-yellow-1:#fef9c3;--theme-ui-colors-yellow-2:#fef08a;--theme-ui-colors-yellow-3:#fde047;--theme-ui-colors-yellow-4:#facc15;--theme-ui-colors-yellow-5:#eab308;--theme-ui-colors-yellow-6:#ca8a04;--theme-ui-colors-yellow-7:#a16207;--theme-ui-colors-yellow-8:#854d0e;--theme-ui-colors-yellow-9:#713f12;--theme-ui-colors-lime-0:#f7fee7;--theme-ui-colors-lime-1:#ecfccb;--theme-ui-colors-lime-2:#d9f99d;--theme-ui-colors-lime-3:#bef264;--theme-ui-colors-lime-4:#a3e635;--theme-ui-colors-lime-5:#84cc16;--theme-ui-colors-lime-6:#65a30d;--theme-ui-colors-lime-7:#4d7c0f;--theme-ui-colors-lime-8:#3f6212;--theme-ui-colors-lime-9:#365314;--theme-ui-colors-green-0:#f0fdf4;--theme-ui-colors-green-1:#dcfce7;--theme-ui-colors-green-2:#bbf7d0;--theme-ui-colors-green-3:#86efac;--theme-ui-colors-green-4:#4ade80;--theme-ui-colors-green-5:#22c55e;--theme-ui-colors-green-6:#16a34a;--theme-ui-colors-green-7:#15803d;--theme-ui-colors-green-8:#166534;--theme-ui-colors-green-9:#14532d;--theme-ui-colors-emerald-0:#ecfdf5;--theme-ui-colors-emerald-1:#d1fae5;--theme-ui-colors-emerald-2:#a7f3d0;--theme-ui-colors-emerald-3:#6ee7b7;--theme-ui-colors-emerald-4:#34d399;--theme-ui-colors-emerald-5:#10b981;--theme-ui-colors-emerald-6:#059669;--theme-ui-colors-emerald-7:#047857;--theme-ui-colors-emerald-8:#065f46;--theme-ui-colors-emerald-9:#064e3b;--theme-ui-colors-teal-0:#f0fdfa;--theme-ui-colors-teal-1:#ccfbf1;--theme-ui-colors-teal-2:#99f6e4;--theme-ui-colors-teal-3:#5eead4;--theme-ui-colors-teal-4:#2dd4bf;--theme-ui-colors-teal-5:#14b8a6;--theme-ui-colors-teal-6:#0d9488;--theme-ui-colors-teal-7:#0f766e;--theme-ui-colors-teal-8:#115e59;--theme-ui-colors-teal-9:#134e4a;--theme-ui-colors-cyan-0:#ecfeff;--theme-ui-colors-cyan-1:#cffafe;--theme-ui-colors-cyan-2:#a5f3fc;--theme-ui-colors-cyan-3:#67e8f9;--theme-ui-colors-cyan-4:#22d3ee;--theme-ui-colors-cyan-5:#06b6d4;--theme-ui-colors-cyan-6:#0891b2;--theme-ui-colors-cyan-7:#0e7490;--theme-ui-colors-cyan-8:#155e75;--theme-ui-colors-cyan-9:#164e63;--theme-ui-colors-sky-0:#f0f9ff;--theme-ui-colors-sky-1:#e0f2fe;--theme-ui-colors-sky-2:#bae6fd;--theme-ui-colors-sky-3:#7dd3fc;--theme-ui-colors-sky-4:#38bdf8;--theme-ui-colors-sky-5:#0ea5e9;--theme-ui-colors-sky-6:#0284c7;--theme-ui-colors-sky-7:#0369a1;--theme-ui-colors-sky-8:#075985;--theme-ui-colors-sky-9:#0c4a6e;--theme-ui-colors-blue-0:#eff6ff;--theme-ui-colors-blue-1:#dbeafe;--theme-ui-colors-blue-2:#bfdbfe;--theme-ui-colors-blue-3:#93c5fd;--theme-ui-colors-blue-4:#60a5fa;--theme-ui-colors-blue-5:#3b82f6;--theme-ui-colors-blue-6:#2563eb;--theme-ui-colors-blue-7:#1d4ed8;--theme-ui-colors-blue-8:#1e40af;--theme-ui-colors-blue-9:#1e3a8a;--theme-ui-colors-indigo-0:#eef2ff;--theme-ui-colors-indigo-1:#e0e7ff;--theme-ui-colors-indigo-2:#c7d2fe;--theme-ui-colors-indigo-3:#a5b4fc;--theme-ui-colors-indigo-4:#818cf8;--theme-ui-colors-indigo-5:#6366f1;--theme-ui-colors-indigo-6:#4f46e5;--theme-ui-colors-indigo-7:#4338ca;--theme-ui-colors-indigo-8:#3730a3;--theme-ui-colors-indigo-9:#312e81;--theme-ui-colors-violet-0:#f5f3ff;--theme-ui-colors-violet-1:#ede9fe;--theme-ui-colors-violet-2:#ddd6fe;--theme-ui-colors-violet-3:#c4b5fd;--theme-ui-colors-violet-4:#a78bfa;--theme-ui-colors-violet-5:#8b5cf6;--theme-ui-colors-violet-6:#7c3aed;--theme-ui-colors-violet-7:#6d28d9;--theme-ui-colors-violet-8:#5b21b6;--theme-ui-colors-violet-9:#4c1d95;--theme-ui-colors-purple-0:#faf5ff;--theme-ui-colors-purple-1:#f3e8ff;--theme-ui-colors-purple-2:#e9d5ff;--theme-ui-colors-purple-3:#d8b4fe;--theme-ui-colors-purple-4:#c084fc;--theme-ui-colors-purple-5:#a855f7;--theme-ui-colors-purple-6:#9333ea;--theme-ui-colors-purple-7:#7e22ce;--theme-ui-colors-purple-8:#6b21a8;--theme-ui-colors-purple-9:#581c87;--theme-ui-colors-fuchsia-0:#fdf4ff;--theme-ui-colors-fuchsia-1:#fae8ff;--theme-ui-colors-fuchsia-2:#f5d0fe;--theme-ui-colors-fuchsia-3:#f0abfc;--theme-ui-colors-fuchsia-4:#e879f9;--theme-ui-colors-fuchsia-5:#d946ef;--theme-ui-colors-fuchsia-6:#c026d3;--theme-ui-colors-fuchsia-7:#a21caf;--theme-ui-colors-fuchsia-8:#86198f;--theme-ui-colors-fuchsia-9:#701a75;--theme-ui-colors-pink-0:#fdf2f8;--theme-ui-colors-pink-1:#fce7f3;--theme-ui-colors-pink-2:#fbcfe8;--theme-ui-colors-pink-3:#f9a8d4;--theme-ui-colors-pink-4:#f472b6;--theme-ui-colors-pink-5:#ec4899;--theme-ui-colors-pink-6:#db2777;--theme-ui-colors-pink-7:#be185d;--theme-ui-colors-pink-8:#9d174d;--theme-ui-colors-pink-9:#831843;--theme-ui-colors-rose-0:#fff1f2;--theme-ui-colors-rose-1:#ffe4e6;--theme-ui-colors-rose-2:#fecdd3;--theme-ui-colors-rose-3:#fda4af;--theme-ui-colors-rose-4:#fb7185;--theme-ui-colors-rose-5:#f43f5e;--theme-ui-colors-rose-6:#e11d48;--theme-ui-colors-rose-7:#be123c;--theme-ui-colors-rose-8:#9f1239;--theme-ui-colors-rose-9:#881337;--theme-ui-colors-grayDark:#1f2937;--theme-ui-colors-text:#1f2937;--theme-ui-colors-background:#fff;--theme-ui-colors-primary:#1d4ed8;--theme-ui-colors-primaryHover:#1e40af;--theme-ui-colors-secondary:#4b5563;--theme-ui-colors-muted:#d1d5db;--theme-ui-colors-success:#86efac;--theme-ui-colors-info:#60a5fa;--theme-ui-colors-warning:#fde047;--theme-ui-colors-danger:#fca5a5;--theme-ui-colors-light:#f3f4f6;--theme-ui-colors-dark:#1f2937;--theme-ui-colors-textMuted:#4b5563;--theme-ui-colors-plain-color:#393A34;--theme-ui-colors-plain-backgroundColor:#f6f8fa;--theme-ui-colors-comment-color:#999988;--theme-ui-colors-comment-fontStyle:italic;--theme-ui-colors-prolog-color:#999988;--theme-ui-colors-prolog-fontStyle:italic;--theme-ui-colors-doctype-color:#999988;--theme-ui-colors-doctype-fontStyle:italic;--theme-ui-colors-cdata-color:#999988;--theme-ui-colors-cdata-fontStyle:italic;--theme-ui-colors-namespace-opacity:0.7;--theme-ui-colors-string-color:#e3116c;--theme-ui-colors-attr-value-color:#e3116c;--theme-ui-colors-punctuation-color:#393A34;--theme-ui-colors-operator-color:#393A34;--theme-ui-colors-entity-color:#36acaa;--theme-ui-colors-url-color:#36acaa;--theme-ui-colors-symbol-color:#36acaa;--theme-ui-colors-number-color:#36acaa;--theme-ui-colors-boolean-color:#36acaa;--theme-ui-colors-variable-color:#36acaa;--theme-ui-colors-constant-color:#36acaa;--theme-ui-colors-property-color:#36acaa;--theme-ui-colors-regex-color:#36acaa;--theme-ui-colors-inserted-color:#36acaa;--theme-ui-colors-atrule-color:#00a4db;--theme-ui-colors-keyword-color:#00009f;--theme-ui-colors-attr-name-color:#00a4db;--theme-ui-colors-selector-color:#00009f;--theme-ui-colors-function-color:#d73a49;--theme-ui-colors-deleted-color:#d73a49;--theme-ui-colors-tag-color:#00009f;--theme-ui-colors-function-variable-color:#6f42c1;--theme-ui-colors-toggleIcon:#1f2937;--theme-ui-colors-heading:#000;--theme-ui-colors-highlight:#28292a;}html.theme-ui-dark,.theme-ui-dark html{--theme-ui-colors-plain-color:#9CDCFE;--theme-ui-colors-plain-backgroundColor:#28292a;--theme-ui-colors-prolog-color:rgb(0, 0, 128);--theme-ui-colors-comment-color:rgb(106, 153, 85);--theme-ui-colors-builtin-color:rgb(86, 156, 214);--theme-ui-colors-changed-color:rgb(86, 156, 214);--theme-ui-colors-keyword-color:rgb(86, 156, 214);--theme-ui-colors-interpolation-punctuation-color:rgb(86, 156, 214);--theme-ui-colors-number-color:rgb(181, 206, 168);--theme-ui-colors-inserted-color:rgb(181, 206, 168);--theme-ui-colors-constant-color:rgb(100, 102, 149);--theme-ui-colors-attr-name-color:rgb(156, 220, 254);--theme-ui-colors-variable-color:rgb(156, 220, 254);--theme-ui-colors-deleted-color:rgb(206, 145, 120);--theme-ui-colors-string-color:rgb(206, 145, 120);--theme-ui-colors-attr-value-color:rgb(206, 145, 120);--theme-ui-colors-template-punctuation-color:rgb(206, 145, 120);--theme-ui-colors-selector-color:rgb(215, 186, 125);--theme-ui-colors-tag-color:rgb(86, 156, 214);--theme-ui-colors-punctuation-color:#808080;--theme-ui-colors-operator-color:rgb(212, 212, 212);--theme-ui-colors-function-color:rgb(220, 220, 170);--theme-ui-colors-class-name-color:rgb(78, 201, 176);--theme-ui-colors-char-color:rgb(209, 105, 105);--theme-ui-colors-highlight:#28292a;--theme-ui-colors-text:#e3e3e3;--theme-ui-colors-primary:#c084fc;--theme-ui-colors-secondary:#8a9ab0;--theme-ui-colors-toggleIcon:#9ca3af;--theme-ui-colors-heading:#fff;--theme-ui-colors-divide:#1f2937;--theme-ui-colors-muted:#1f2937;--theme-ui-colors-highlightLineBg:rgba(255, 255, 255, 0.1);--theme-ui-colors-background:#1f1f1f;}html.theme-ui-light,.theme-ui-light html{--theme-ui-colors-plain-color:#393A34;--theme-ui-colors-plain-backgroundColor:#f8fafd;--theme-ui-colors-comment-color:#999988;--theme-ui-colors-comment-fontStyle:italic;--theme-ui-colors-prolog-color:#999988;--theme-ui-colors-prolog-fontStyle:italic;--theme-ui-colors-doctype-color:#999988;--theme-ui-colors-doctype-fontStyle:italic;--theme-ui-colors-cdata-color:#999988;--theme-ui-colors-cdata-fontStyle:italic;--theme-ui-colors-namespace-opacity:0.7;--theme-ui-colors-string-color:#e3116c;--theme-ui-colors-attr-value-color:#e3116c;--theme-ui-colors-punctuation-color:#393A34;--theme-ui-colors-operator-color:#393A34;--theme-ui-colors-entity-color:#36acaa;--theme-ui-colors-url-color:#36acaa;--theme-ui-colors-symbol-color:#36acaa;--theme-ui-colors-number-color:#36acaa;--theme-ui-colors-boolean-color:#36acaa;--theme-ui-colors-variable-color:#36acaa;--theme-ui-colors-constant-color:#36acaa;--theme-ui-colors-property-color:#36acaa;--theme-ui-colors-regex-color:#36acaa;--theme-ui-colors-inserted-color:#36acaa;--theme-ui-colors-atrule-color:#00a4db;--theme-ui-colors-keyword-color:#00009f;--theme-ui-colors-attr-name-color:#00a4db;--theme-ui-colors-selector-color:#00009f;--theme-ui-colors-function-color:#d73a49;--theme-ui-colors-deleted-color:#d73a49;--theme-ui-colors-tag-color:#00009f;--theme-ui-colors-function-variable-color:#6f42c1;--theme-ui-colors-highlight:#e2e8f0;--theme-ui-colors-text:#000;--theme-ui-colors-primary:#7e22ce;--theme-ui-colors-secondary:#5f6c80;--theme-ui-colors-toggleIcon:#1f2937;--theme-ui-colors-heading:#000;--theme-ui-colors-divide:#9ca3af;--theme-ui-colors-muted:#e5e7eb;--theme-ui-colors-highlightLineBg:rgba(0, 0, 0, 0.035);--theme-ui-colors-background:#fff;}</style><style data-emotion="css-global oiq1hr">*{box-sizing:border-box;}html{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";line-height:1.625;font-weight:400;color:var(--theme-ui-colors-text);background-color:var(--theme-ui-colors-background);margin:0;padding:0;box-sizing:border-box;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%;}html img{border-style:none;}html pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;}html a{-webkit-transition:all 0.3s ease-in-out;transition:all 0.3s ease-in-out;color:var(--theme-ui-colors-text);}body{margin:0;}</style><div style="outline:none" tabindex="-1" id="gatsby-focus-wrapper"><style data-emotion="css-global cjr7z1">*{box-sizing:inherit;}[hidden]{display:none;}::selection{background-color:var(--theme-ui-colors-text);color:var(--theme-ui-colors-background);}</style><style data-emotion="css 1gq7j3t">.css-1gq7j3t{border:0;clip:react(0 0 0 0);height:1px;width:1px;margin:-1px;padding:0;overflow:hidden;position:absolute;}.css-1gq7j3t:focus{padding:1rem;position:fixed;top:15px;left:15px;background-color:var(--theme-ui-colors-heading);color:var(--theme-ui-colors-background);z-index:1;width:auto;height:auto;clip:auto;-webkit-text-decoration:none;text-decoration:none;}</style><a href="#skip-nav" data-skip-link="true" class="css-1gq7j3t">Skip to content</a><style data-emotion="css 1s59pbd">.css-1s59pbd{box-sizing:border-box;margin:0;min-width:0;width:100%;max-width:container;margin-left:auto;margin-right:auto;padding:1rem;max-width:1024px;}@media screen and (min-width: 640px){.css-1s59pbd{padding:2rem;}}</style><div class="css-1s59pbd"><style data-emotion="css fvifxy">.css-fvifxy{margin-bottom:1rem;}@media screen and (min-width: 640px){.css-fvifxy{margin-bottom:4rem;}}</style><header class="css-fvifxy"><style data-emotion="css 1xwyizx">.css-1xwyizx{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}</style><style data-emotion="css w86e33">.css-w86e33{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}</style><style data-emotion="css x80c29">.css-x80c29{box-sizing:border-box;margin:0;min-width:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}</style><div class="css-x80c29"><style data-emotion="css uxjqfw">.css-uxjqfw{color:var(--theme-ui-colors-heading);-webkit-text-decoration:none;text-decoration:none;}</style><a aria-label="MQ Blog - Back to home" class="css-uxjqfw" href="/"><style data-emotion="css mvgjiw">.css-mvgjiw{margin-top:0;margin-bottom:0;font-weight:600;font-size:1.5em;}@media screen and (min-width: 640px){.css-mvgjiw{font-size:1.875em;}}</style><div class="css-mvgjiw">MQ Blog</div></a><style data-emotion="css 3ba0x7">.css-3ba0x7{opacity:0.65;position:relative;border-radius:4px;width:40px;height:25px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-transition:opacity 0.3s ease;transition:opacity 0.3s ease;border:none;outline:none;background:none;cursor:pointer;padding:0;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;}.css-3ba0x7:hover,.css-3ba0x7:focus{opacity:1;}</style><button type="button" class="css-3ba0x7"><style data-emotion="css 1ggalm8">.css-1ggalm8{position:relative;width:24px;height:24px;border-radius:50%;-webkit-transition:all 0.45s ease;transition:all 0.45s ease;-webkit-transform:scale(0.55);-moz-transform:scale(0.55);-ms-transform:scale(0.55);transform:scale(0.55);}.css-1ggalm8:before{content:"";position:absolute;right:-9px;top:-9px;height:24px;width:24px;-webkit-transition:-webkit-transform 0.45s ease;transition:transform 0.45s ease;border-radius:50%;opacity:0;}.css-1ggalm8:after{content:"";width:8px;height:8px;border-radius:50%;margin:-4px 0 0 -4px;position:absolute;top:50%;left:50%;-webkit-transition:all 0.35s ease;transition:all 0.35s ease;box-shadow:0 -23px 0 var(--theme-ui-colors-toggleIcon),0 23px 0 var(--theme-ui-colors-toggleIcon),23px 0 0 var(--theme-ui-colors-toggleIcon),-23px 0 0 var(--theme-ui-colors-toggleIcon),15px 15px 0 var(--theme-ui-colors-toggleIcon),-15px 15px 0 var(--theme-ui-colors-toggleIcon),15px -15px 0 var(--theme-ui-colors-toggleIcon),-15px -15px 0 var(--theme-ui-colors-toggleIcon);-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);transform:scale(0);}</style><div class="css-1ggalm8"></div></button></div><style data-emotion="css lrg0i3">.css-lrg0i3{box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-bottom-style:solid;border-bottom-width:1px;border-bottom-color:divide;padding-bottom:1rem;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;margin-top:1rem;color:var(--theme-ui-colors-secondary);-webkit-box-flex-flow:wrap;-webkit-flex-flow:wrap;-ms-flex-flow:wrap;flex-flow:wrap;}.css-lrg0i3 a{color:var(--theme-ui-colors-secondary);}.css-lrg0i3 a:hover{color:var(--theme-ui-colors-heading);}</style><div class="css-lrg0i3"><style data-emotion="css 1y2r9kq">.css-1y2r9kq{font-size:1em;}.css-1y2r9kq a:not(:last-of-type){margin-right:1rem;}@media screen and (min-width: 640px){.css-1y2r9kq{font-size:1.25em;}}@media screen and (min-width: 768px){.css-1y2r9kq{font-size:1.25em;}}.css-1y2r9kq .active{color:var(--theme-ui-colors-heading);}</style><nav class="css-1y2r9kq"><style data-emotion="css bpdkdn">.css-bpdkdn{color:var(--theme-ui-colors-primary);-webkit-text-decoration:none;text-decoration:none;}.css-bpdkdn:hover{-webkit-text-decoration:underline;text-decoration:underline;}</style><a class="css-bpdkdn" href="/blog">Blog</a><a class="css-bpdkdn" href="/bookmark">BookMark</a><a class="css-bpdkdn" href="/colors">Colors</a><a class="css-bpdkdn" href="/about">About</a></nav><style data-emotion="css lrtsq2">.css-lrtsq2{font-size:1em;}.css-lrtsq2 a:not(:first-of-type){margin-left:1rem;}@media screen and (min-width: 640px){.css-lrtsq2{font-size:1.25em;}}</style><div class="css-lrtsq2"><style data-emotion="css 1s8mmxz">.css-1s8mmxz{box-sizing:border-box;margin:0;min-width:0;color:var(--theme-ui-colors-primary);-webkit-text-decoration:none;text-decoration:none;}.css-1s8mmxz:hover{-webkit-text-decoration:underline;text-decoration:underline;}</style><a href="https://github.com/mqjd" class="css-1s8mmxz">Github</a></div></div></header><style data-emotion="css 1c039qg">.css-1c039qg .prism-code{font-size:1em;webkit-overflow-scrolling:touch;background-color:var(--theme-ui-colors-transparent);min-width:100%;margin-bottom:0;margin-top:0;overflow:auto;}.css-1c039qg .prism-code[data-linenumber="false"] .token-line{padding-left:1rem;}.css-1c039qg .gatsby-highlight[data-language='none'] .code-content,.css-1c039qg .gatsby-highlight[data-language=''] .code-content{padding-top:1rem;}.css-1c039qg .code-content{padding:2rem 1rem 1rem 1rem;color:var(--theme-ui-colors-plain-color);background-color:var(--theme-ui-colors-plain-backgroundColor);}.css-1c039qg .token{display:inline-block;}.css-1c039qg p>code,.css-1c039qg li>code{background-color:var(--theme-ui-colors-muted);color:var(--theme-ui-colors-heading);padding-left:0.5rem;padding-right:0.5rem;padding-top:0.25rem;padding-bottom:0.25rem;border-radius:4px;font-size:0.95em;}.css-1c039qg .gatsby-highlight{font-size:1.25em;position:relative;webkit-overflow-scrolling:touch;border-radius:4px;overflow:hidden;margin-left:0;margin-right:0;}@media screen and (min-width: 640px){.css-1c039qg .gatsby-highlight{font-size:1.25em;margin-left:0;margin-right:0;}}@media screen and (min-width: 768px){.css-1c039qg .gatsby-highlight{margin-left:0;margin-right:0;}}@media screen and (min-width: 1024px){.css-1c039qg .gatsby-highlight{margin-left:-1rem;margin-right:-1rem;}}.css-1c039qg .gatsby-highlight .token-line{margin-left:-1rem;margin-right:-1rem;min-width:100%;}.css-1c039qg .gatsby-highlight pre code{float:left;min-width:100%;}.css-1c039qg .gatsby-highlight pre[class*="language-"]:before{background-color:var(--theme-ui-colors-white);border-radius:0 0 4px 4px;color:var(--theme-ui-colors-black);font-size:12px;letter-spacing:0.035rem;padding:0.1rem 0.5rem;position:absolute;left:1rem;text-align:right;text-transform:uppercase;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:600;}.css-1c039qg .gatsby-highlight pre[class~="language-golang"]:before,.css-1c039qg .gatsby-highlight pre[class~="language-go"]:before{content:"go";background:#79d4fd;color:var(--theme-ui-colors-black);}.css-1c039qg .gatsby-highlight pre[class~="language-javascript"]:before,.css-1c039qg .gatsby-highlight pre[class~="language-js"]:before{content:"js";background:#f7df1e;color:var(--theme-ui-colors-black);}.css-1c039qg .gatsby-highlight pre[class~="language-jsx"]:before{content:"jsx";background:#61dafb;color:var(--theme-ui-colors-black);}.css-1c039qg .gatsby-highlight pre[class~="language-ts"]:before{content:"ts";background:#61dafb;color:var(--theme-ui-colors-black);}.css-1c039qg .gatsby-highlight pre[class~="language-tsx"]:before{content:"tsx";background:#61dafb;color:var(--theme-ui-colors-black);}.css-1c039qg .gatsby-highlight pre[class~="language-html"]:before{content:"html";background:#005a9c;color:var(--theme-ui-colors-white);}.css-1c039qg .gatsby-highlight pre[class~="language-xml"]:before{content:"xml";background:#005a9c;color:var(--theme-ui-colors-white);}.css-1c039qg .gatsby-highlight pre[class~="language-svg"]:before{content:"svg";background:#005a9c;color:var(--theme-ui-colors-white);}.css-1c039qg .gatsby-highlight pre[class~="language-graphql"]:before{content:"GraphQL";background:#E10098;}.css-1c039qg .gatsby-highlight pre[class~="language-css"]:before{content:"css";background:#ff9800;color:var(--theme-ui-colors-black);}.css-1c039qg .gatsby-highlight pre[class~="language-mdx"]:before{content:"mdx";background:#f9ac00;color:var(--theme-ui-colors-black);}.css-1c039qg .gatsby-highlight pre[class~="language-php"]:before{content:"php";background:#777bb3;color:var(--theme-ui-colors-black);}.css-1c039qg .gatsby-highlight pre[class~="language-py"]:before,.css-1c039qg .gatsby-highlight pre[class~="language-python"]:before{content:"py";background:#306998;color:var(--theme-ui-colors-white);}.css-1c039qg .gatsby-highlight pre[class~="language-text"]:before{content:"text";}.css-1c039qg .gatsby-highlight pre[class~='language-shell']:before{content:'shell';}.css-1c039qg .gatsby-highlight pre[class~='language-sh']:before{content:'sh';}.css-1c039qg .gatsby-highlight pre[class~='language-bash']:before{content:'bash';}.css-1c039qg .gatsby-highlight pre[class~='language-yaml']:before{content:'yaml';background:#ffa8df;}.css-1c039qg .gatsby-highlight pre[class~='language-yml']:before{content:'yml';background:#ffa8df;}.css-1c039qg .gatsby-highlight pre[class~='language-markdown']:before{content:'md';}.css-1c039qg .gatsby-highlight pre[class~='language-json']:before,.css-1c039qg .gatsby-highlight pre[class~='language-json5']:before{content:'json';background:linen;}.css-1c039qg .gatsby-highlight pre[class~='language-diff']:before{content:'diff';background:#e6ffed;}.css-1c039qg .gatsby-highlight>code[class*="language-"],.css-1c039qg .gatsby-highlight>pre[class=*="language-"]{word-spacing:normal;word-break:normal;overflow-wrap:normal;line-height:1.5;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}.css-1c039qg .gatsby-highlight pre::-webkit-scrollbar{width:0.5rem;height:0.5rem;}.css-1c039qg .gatsby-highlight pre::-webkit-scrollbar-thumb{background-color:var(--theme-ui-colors-primary);}.css-1c039qg .gatsby-highlight pre::-webkit-scrollbar-track{background:var(--theme-ui-colors-muted);}.css-1c039qg .line-number-style{display:inline-block;width:3em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;opacity:0.3;text-align:center;position:relative;}.css-1c039qg .code-title{background-color:var(--theme-ui-colors-muted);color:var(--theme-ui-colors-text);font-size:1em;padding-left:1rem;padding-right:1rem;padding-top:0.5rem;padding-bottom:0.5rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";}.css-1c039qg .token-line{padding-right:1rem;}.css-1c039qg .highlight-line{border-left:4px solid rgb(2, 155, 206);}.css-1c039qg .highlight-line .line-number-style{width:calc(3em - 4px);opacity:0.5;left:-2px;}.css-1c039qg .footnotes{border-top-style:solid;border-top-width:1px;border-top-color:divide;padding-top:0.5rem;margin-top:4rem;overflow:auto;}.css-1c039qg .footnotes .sr-only{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px;}.css-1c039qg .react-live-wrapper{position:relative;}</style><style data-emotion="css c9nvgd">.css-c9nvgd{box-sizing:border-box;margin:0;min-width:0;}.css-c9nvgd .prism-code{font-size:1em;webkit-overflow-scrolling:touch;background-color:var(--theme-ui-colors-transparent);min-width:100%;margin-bottom:0;margin-top:0;overflow:auto;}.css-c9nvgd .prism-code[data-linenumber="false"] .token-line{padding-left:1rem;}.css-c9nvgd .gatsby-highlight[data-language='none'] .code-content,.css-c9nvgd .gatsby-highlight[data-language=''] .code-content{padding-top:1rem;}.css-c9nvgd .code-content{padding:2rem 1rem 1rem 1rem;color:var(--theme-ui-colors-plain-color);background-color:var(--theme-ui-colors-plain-backgroundColor);}.css-c9nvgd .token{display:inline-block;}.css-c9nvgd p>code,.css-c9nvgd li>code{background-color:var(--theme-ui-colors-muted);color:var(--theme-ui-colors-heading);padding-left:0.5rem;padding-right:0.5rem;padding-top:0.25rem;padding-bottom:0.25rem;border-radius:4px;font-size:0.95em;}.css-c9nvgd .gatsby-highlight{font-size:1.25em;position:relative;webkit-overflow-scrolling:touch;border-radius:4px;overflow:hidden;margin-left:0;margin-right:0;}@media screen and (min-width: 640px){.css-c9nvgd .gatsby-highlight{font-size:1.25em;margin-left:0;margin-right:0;}}@media screen and (min-width: 768px){.css-c9nvgd .gatsby-highlight{margin-left:0;margin-right:0;}}@media screen and (min-width: 1024px){.css-c9nvgd .gatsby-highlight{margin-left:-1rem;margin-right:-1rem;}}.css-c9nvgd .gatsby-highlight .token-line{margin-left:-1rem;margin-right:-1rem;min-width:100%;}.css-c9nvgd .gatsby-highlight pre code{float:left;min-width:100%;}.css-c9nvgd .gatsby-highlight pre[class*="language-"]:before{background-color:var(--theme-ui-colors-white);border-radius:0 0 4px 4px;color:var(--theme-ui-colors-black);font-size:12px;letter-spacing:0.035rem;padding:0.1rem 0.5rem;position:absolute;left:1rem;text-align:right;text-transform:uppercase;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:600;}.css-c9nvgd .gatsby-highlight pre[class~="language-golang"]:before,.css-c9nvgd .gatsby-highlight pre[class~="language-go"]:before{content:"go";background:#79d4fd;color:var(--theme-ui-colors-black);}.css-c9nvgd .gatsby-highlight pre[class~="language-javascript"]:before,.css-c9nvgd .gatsby-highlight pre[class~="language-js"]:before{content:"js";background:#f7df1e;color:var(--theme-ui-colors-black);}.css-c9nvgd .gatsby-highlight pre[class~="language-jsx"]:before{content:"jsx";background:#61dafb;color:var(--theme-ui-colors-black);}.css-c9nvgd .gatsby-highlight pre[class~="language-ts"]:before{content:"ts";background:#61dafb;color:var(--theme-ui-colors-black);}.css-c9nvgd .gatsby-highlight pre[class~="language-tsx"]:before{content:"tsx";background:#61dafb;color:var(--theme-ui-colors-black);}.css-c9nvgd .gatsby-highlight pre[class~="language-html"]:before{content:"html";background:#005a9c;color:var(--theme-ui-colors-white);}.css-c9nvgd .gatsby-highlight pre[class~="language-xml"]:before{content:"xml";background:#005a9c;color:var(--theme-ui-colors-white);}.css-c9nvgd .gatsby-highlight pre[class~="language-svg"]:before{content:"svg";background:#005a9c;color:var(--theme-ui-colors-white);}.css-c9nvgd .gatsby-highlight pre[class~="language-graphql"]:before{content:"GraphQL";background:#E10098;}.css-c9nvgd .gatsby-highlight pre[class~="language-css"]:before{content:"css";background:#ff9800;color:var(--theme-ui-colors-black);}.css-c9nvgd .gatsby-highlight pre[class~="language-mdx"]:before{content:"mdx";background:#f9ac00;color:var(--theme-ui-colors-black);}.css-c9nvgd .gatsby-highlight pre[class~="language-php"]:before{content:"php";background:#777bb3;color:var(--theme-ui-colors-black);}.css-c9nvgd .gatsby-highlight pre[class~="language-py"]:before,.css-c9nvgd .gatsby-highlight pre[class~="language-python"]:before{content:"py";background:#306998;color:var(--theme-ui-colors-white);}.css-c9nvgd .gatsby-highlight pre[class~="language-text"]:before{content:"text";}.css-c9nvgd .gatsby-highlight pre[class~='language-shell']:before{content:'shell';}.css-c9nvgd .gatsby-highlight pre[class~='language-sh']:before{content:'sh';}.css-c9nvgd .gatsby-highlight pre[class~='language-bash']:before{content:'bash';}.css-c9nvgd .gatsby-highlight pre[class~='language-yaml']:before{content:'yaml';background:#ffa8df;}.css-c9nvgd .gatsby-highlight pre[class~='language-yml']:before{content:'yml';background:#ffa8df;}.css-c9nvgd .gatsby-highlight pre[class~='language-markdown']:before{content:'md';}.css-c9nvgd .gatsby-highlight pre[class~='language-json']:before,.css-c9nvgd .gatsby-highlight pre[class~='language-json5']:before{content:'json';background:linen;}.css-c9nvgd .gatsby-highlight pre[class~='language-diff']:before{content:'diff';background:#e6ffed;}.css-c9nvgd .gatsby-highlight>code[class*="language-"],.css-c9nvgd .gatsby-highlight>pre[class=*="language-"]{word-spacing:normal;word-break:normal;overflow-wrap:normal;line-height:1.5;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}.css-c9nvgd .gatsby-highlight pre::-webkit-scrollbar{width:0.5rem;height:0.5rem;}.css-c9nvgd .gatsby-highlight pre::-webkit-scrollbar-thumb{background-color:var(--theme-ui-colors-primary);}.css-c9nvgd .gatsby-highlight pre::-webkit-scrollbar-track{background:var(--theme-ui-colors-muted);}.css-c9nvgd .line-number-style{display:inline-block;width:3em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;opacity:0.3;text-align:center;position:relative;}.css-c9nvgd .code-title{background-color:var(--theme-ui-colors-muted);color:var(--theme-ui-colors-text);font-size:1em;padding-left:1rem;padding-right:1rem;padding-top:0.5rem;padding-bottom:0.5rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";}.css-c9nvgd .token-line{padding-right:1rem;}.css-c9nvgd .highlight-line{border-left:4px solid rgb(2, 155, 206);}.css-c9nvgd .highlight-line .line-number-style{width:calc(3em - 4px);opacity:0.5;left:-2px;}.css-c9nvgd .footnotes{border-top-style:solid;border-top-width:1px;border-top-color:divide;padding-top:0.5rem;margin-top:4rem;overflow:auto;}.css-c9nvgd .footnotes .sr-only{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px;}.css-c9nvgd .react-live-wrapper{position:relative;}</style><main id="skip-nav" class=" css-c9nvgd"><style data-emotion="css ay3se6">.css-ay3se6{box-sizing:border-box;margin:0;min-width:0;font-family:inherit;font-weight:700;line-height:1.25;font-family:inherit;font-weight:700;line-height:1.25;margin:0;margin-bottom:0.25rem;font-size:2em;margin-top:2rem;color:var(--theme-ui-colors-heading);}@media screen and (min-width: 640px){.css-ay3se6{font-size:2.25em;}}@media screen and (min-width: 768px){.css-ay3se6{font-size:2.25em;}}@media screen and (min-width: 1024px){.css-ay3se6{font-size:3em;}}</style><h1 class="css-ay3se6">Flink基本知识</h1><style data-emotion="css x497ps">.css-x497ps{color:var(--theme-ui-colors-secondary);margin-top:1rem;font-size:1em;}.css-x497ps a{color:var(--theme-ui-colors-secondary);}@media screen and (min-width: 640px){.css-x497ps{font-size:1.25em;}}</style><p class="css-x497ps"><time>2020-04-24</time> — <a class="css-bpdkdn" href="/tags/bigdata">Bigdata</a>, <a class="css-bpdkdn" href="/tags/flink">Flink</a> — <span>15<!-- --> min read</span></p><style data-emotion="css 1hmliqv">.css-1hmliqv{margin-top:4rem;margin-bottom:4rem;}.css-1hmliqv .gatsby-resp-image-wrapper{margin-top:2rem;margin-bottom:2rem;border-radius:4px;box-shadow:rgba(0, 0, 0, 0.1) 0px 16px 16px 0px,rgba(0, 0, 0, 0.1) 0px 8px 8px 0px,rgba(0, 0, 0, 0.1) 0px 4px 4px 0px;}@media screen and (min-width: 640px){.css-1hmliqv .gatsby-resp-image-wrapper{margin-top:2rem;margin-bottom:2rem;}}@media screen and (min-width: 768px){.css-1hmliqv .gatsby-resp-image-wrapper{margin-top:4rem;margin-bottom:4rem;}}.css-1hmliqv .gatsby-resp-image-wrapper .gatsby-resp-image-image{border-radius:4px;}.css-1hmliqv figure{margin:0;}.css-1hmliqv figure img{border-radius:4px;box-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1),0 4px 6px -4px rgb(0 0 0 / 0.1);max-width:100%;}</style><section class="post css-1hmliqv"><style data-emotion="css 1y7jhj">.css-1y7jhj{font-family:inherit;font-weight:700;line-height:1.25;margin:0;margin-bottom:0.25rem;font-size:1.875em;margin-top:2rem;color:var(--theme-ui-colors-heading);}@media screen and (min-width: 640px){.css-1y7jhj{font-size:2em;}}@media screen and (min-width: 768px){.css-1y7jhj{font-size:2em;}}@media screen and (min-width: 1024px){.css-1y7jhj{font-size:2.25em;}}</style><style data-emotion="css 19rk9qi">.css-19rk9qi{font-family:inherit;font-weight:700;line-height:1.25;margin:0;margin-bottom:0.25rem;font-size:1.875em;margin-top:2rem;color:var(--theme-ui-colors-heading);font-family:inherit;font-weight:700;line-height:1.25;margin:0;margin-bottom:0.25rem;font-size:1.875em;margin-top:2rem;color:var(--theme-ui-colors-heading);}@media screen and (min-width: 640px){.css-19rk9qi{font-size:2em;}}@media screen and (min-width: 768px){.css-19rk9qi{font-size:2em;}}@media screen and (min-width: 1024px){.css-19rk9qi{font-size:2.25em;}}@media screen and (min-width: 640px){.css-19rk9qi{font-size:2em;}}@media screen and (min-width: 768px){.css-19rk9qi{font-size:2em;}}@media screen and (min-width: 1024px){.css-19rk9qi{font-size:2.25em;}}</style><h2 id="flink-基本概念" style="position:relative" class="css-19rk9qi"><style data-emotion="css 1d2wwf6">.css-1d2wwf6{color:var(--theme-ui-colors-primary);-webkit-text-decoration:none;text-decoration:none;}.css-1d2wwf6:hover{-webkit-text-decoration:underline;text-decoration:underline;}</style><style data-emotion="css 1diwg7s">.css-1diwg7s{color:var(--theme-ui-colors-primary);-webkit-text-decoration:none;text-decoration:none;color:var(--theme-ui-colors-primary);-webkit-text-decoration:none;text-decoration:none;}.css-1diwg7s:hover{-webkit-text-decoration:underline;text-decoration:underline;}.css-1diwg7s:hover{-webkit-text-decoration:underline;text-decoration:underline;}</style><a href="#flink-%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5" aria-label="flink 基本概念 permalink" class="anchor before css-1diwg7s"><span><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></span></a><a href="https://t.hk.uy/aDBj" class="css-1diwg7s">Flink 基本概念</a></h2>
<style data-emotion="css 2aj61p">.css-2aj61p{font-size:1em;letter-spacing:-0.003em;line-height:1.625;--baseline-multiplier:0.179;--x-height-multiplier:0.35;word-break:break-word;}</style><style data-emotion="css 12jtcxd">.css-12jtcxd{font-size:1em;letter-spacing:-0.003em;line-height:1.625;--baseline-multiplier:0.179;--x-height-multiplier:0.35;word-break:break-word;font-size:1em;letter-spacing:-0.003em;line-height:1.625;--baseline-multiplier:0.179;--x-height-multiplier:0.35;word-break:break-word;}</style><p class="css-12jtcxd">Apache Flink 是一个框架和分布式处理引擎，用于在无边界和有边界数据流上进行有状态的计 算。Flink 能在所有常见集群环境中运行，并能以内存速度和任意规模进行计算。
<style data-emotion="css 1fyjmfg">.css-1fyjmfg{border-radius:4px;box-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1),0 4px 6px -4px rgb(0 0 0 / 0.1);max-width:100%;}</style><style data-emotion="css 1aeu565">.css-1aeu565{border-radius:4px;box-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1),0 4px 6px -4px rgb(0 0 0 / 0.1);max-width:100%;border-radius:4px;box-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1),0 4px 6px -4px rgb(0 0 0 / 0.1);max-width:100%;}</style><img src="https://mqjd.github.io/assets/imgs/img/flink_home_graphic.png" alt="总体" class="css-1aeu565"/></p>
<h2 id="名词介绍" style="position:relative" class="css-19rk9qi"><a href="#%E5%90%8D%E8%AF%8D%E4%BB%8B%E7%BB%8D" aria-label="名词介绍 permalink" class="anchor before css-1diwg7s"><span><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></span></a>名词介绍</h2>
<p class="css-12jtcxd"><a href="https://ci.apache.org/projects/flink/flink-docs-release-1.10/concepts/glossary.html" class="css-1diwg7s">Flink官网: 名词介绍</a></p>
<h2 id="整体组件" style="position:relative" class="css-19rk9qi"><a href="#%E6%95%B4%E4%BD%93%E7%BB%84%E4%BB%B6" aria-label="整体组件 permalink" class="anchor before css-1diwg7s"><span><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></span></a>整体组件</h2>
<style data-emotion="css 5b2ugf">.css-5b2ugf{border-left-color:var(--theme-ui-colors-primary);border-left-style:solid;border-left-width:0.5em;border-radius:4px;background-color:var(--theme-ui-colors-highlight);margin-left:0;margin-right:0;padding-left:1em;padding-top:0.5em;padding-bottom:0.5em;}.css-5b2ugf p{font-style:italic;margin-top:0;margin-bottom:0;}</style><style data-emotion="css 11hndp5">.css-11hndp5{border-left-color:var(--theme-ui-colors-primary);border-left-style:solid;border-left-width:0.5em;border-radius:4px;background-color:var(--theme-ui-colors-highlight);margin-left:0;margin-right:0;padding-left:1em;padding-top:0.5em;padding-bottom:0.5em;border-left-color:var(--theme-ui-colors-primary);border-left-style:solid;border-left-width:0.5em;border-radius:4px;background-color:var(--theme-ui-colors-highlight);margin-left:0;margin-right:0;padding-left:1em;padding-top:0.5em;padding-bottom:0.5em;}.css-11hndp5 p{font-style:italic;margin-top:0;margin-bottom:0;}.css-11hndp5 p{font-style:italic;margin-top:0;margin-bottom:0;}</style><blockquote class="css-11hndp5">
<p class="css-12jtcxd">下面的图片可点击模块跳转至官方说明</p>
</blockquote>
<div><center><img src="https://mqjd.github.io/assets/imgs/img/flink_stack.png" width="700px" alt="Apache Flink：堆栈" useMap="#overview-stack"/></center><map name="overview-stack"><area id="lib-datastream-cep" title="CEP: Complex Event Processing" href="//ci.apache.org/projects/flink/flink-docs-release-1.10/dev/libs/cep.html" target="_blank" shape="rect" coords="63,0,143,177"/><area id="lib-datastream-table" title="Table: Relational DataStreams" href="//ci.apache.org/projects/flink/flink-docs-release-1.10/dev/table/index.html" target="_blank" shape="rect" coords="143,0,223,177"/><area id="lib-dataset-gelly" title="Gelly: Graph Processing" href="//ci.apache.org/projects/flink/flink-docs-release-1.10/dev/libs/gelly/index.html" target="_blank" shape="rect" coords="461,0,541,177"/><area id="lib-dataset-table" title="Table API and SQL" href="//ci.apache.org/projects/flink/flink-docs-release-1.10/dev/table/index.html" target="_blank" shape="rect" coords="544,0,624,177"/><area id="datastream" title="DataStream API" href="//ci.apache.org/projects/flink/flink-docs-release-1.10/dev/datastream_api.html" target="_blank" shape="rect" coords="64,177,379,255"/><area id="dataset" title="DataSet API" href="//ci.apache.org/projects/flink/flink-docs-release-1.10/dev/batch/index.html" target="_blank" shape="rect" coords="382,177,697,255"/><area id="runtime" title="Runtime" href="//ci.apache.org/projects/flink/flink-docs-release-1.10/concepts/runtime.html" target="_blank" shape="rect" coords="63,257,700,335"/><area id="local" title="Local" href="//ci.apache.org/projects/flink/flink-docs-release-1.10/getting-started/tutorials/local_setup.html" target="_blank" shape="rect" coords="62,337,275,414"/><area id="cluster" title="Cluster" href="//ci.apache.org/projects/flink/flink-docs-release-1.10/ops/deployment/cluster_setup.html" target="_blank" shape="rect" coords="273,336,486,413"/></map></div>
<style data-emotion="css cbhsdz">.css-cbhsdz li{font-size:1em;letter-spacing:-0.003em;line-height:1.625;--baseline-multiplier:0.179;--x-height-multiplier:0.35;}</style><style data-emotion="css ge23ay">.css-ge23ay li{font-size:1em;letter-spacing:-0.003em;line-height:1.625;--baseline-multiplier:0.179;--x-height-multiplier:0.35;}.css-ge23ay li{font-size:1em;letter-spacing:-0.003em;line-height:1.625;--baseline-multiplier:0.179;--x-height-multiplier:0.35;}</style><ul class="css-ge23ay">
<li class="css-zezy6m">
<p class="css-12jtcxd">Deployment层。该层主要涉及了Flink的部署模式，Flink支持多种部署模式：本地、集群(Standalone/YARN),(GCE/EC200)。</p>
</li>
<li class="css-zezy6m">
<p class="css-12jtcxd">Runtime层。Runtime层提供了支持Flink计算的全部核心实现，比如：支持分布式Stream处  理、JobGraph到ExecutionGraph的映射、调度等等，为上层API层提供基础服务。</p>
</li>
<li class="css-zezy6m">
<p class="css-12jtcxd">API层： 主要实现了面向无界Stream的流处理和面向Batch的批处理API，其中面向流处理对应DataStream API，面向批处理对应DataSet API。</p>
</li>
<li class="css-zezy6m">
<p class="css-12jtcxd">Libraries层：该层也可以称为Flink应用框架层，根据API层的划分，在API层之上构建的满足特定应用的实现计算框架，也分别对应于面向流处理和面向批处理两类。面向流处理支持：CEP（复杂事件处理）、基于SQL-like的操作（基于Table的关系操作）；面向批处理支持：FlinkML（机器学习库）、Gelly（图处理）</p>
</li>
</ul>
<h2 id="流" style="position:relative" class="css-19rk9qi"><a href="#%E6%B5%81" aria-label="流 permalink" class="anchor before css-1diwg7s"><span><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></span></a>流</h2>
<ul class="css-ge23ay">
<li class="css-zezy6m">有界流(Bounded)
有定义流的开始，但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理，即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理，因为输入是无限的，在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件，例如事件发生的顺序，以便能够推断结果的完整性。</li>
<li class="css-zezy6m">无界流(Unbounded)
有定义流的开始，也有定义流的结束。有界流可以在摄取所有  数据后再进行计算。有界流所有数据可以被排序，所以并不需要有序摄取。有界流处理通常被称为批处理</li>
</ul>
<img src="https://mqjd.github.io/assets/imgs/img/flink_bounded_unbounded.png" alt="流" class="css-1aeu565"/>
<h2 id="数据流编程模型" style="position:relative" class="css-19rk9qi"><a href="#%E6%95%B0%E6%8D%AE%E6%B5%81%E7%BC%96%E7%A8%8B%E6%A8%A1%E5%9E%8B" aria-label="数据流编程模型 permalink" class="anchor before css-1diwg7s"><span><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></span></a>数据流编程模型</h2>
<p class="css-12jtcxd"><a href="https://ci.apache.org/projects/flink/flink-docs-release-1.10/concepts/programming-model.html" class="css-1diwg7s">Flink官网: 数据流编程模型</a></p>
<h2 id="分布式运行环境" style="position:relative" class="css-19rk9qi"><a href="#%E5%88%86%E5%B8%83%E5%BC%8F%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83" aria-label="分布式运行环境 permalink" class="anchor before css-1diwg7s"><span><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></span></a>分布式运行环境</h2>
<p class="css-12jtcxd"><a href="https://ci.apache.org/projects/flink/flink-docs-release-1.10/concepts/runtime.html" class="css-1diwg7s">Flink官网: 分布式运行环境</a></p>
<h2 id="状态" style="position:relative" class="css-19rk9qi"><a href="#%E7%8A%B6%E6%80%81" aria-label="状态 permalink" class="anchor before css-1diwg7s"><span><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></span></a>状态</h2>
<p class="css-12jtcxd"><a href="https://t.hk.uy/aDBn" class="css-1diwg7s">Flink 状态管理及容错机制</a></p>
<p class="css-12jtcxd"><a href="https://ci.apache.org/projects/flink/flink-docs-release-1.10/internals/stream_checkpointing.html" class="css-1diwg7s">Flink官网: 容错机制</a></p>
<h2 id="时间" style="position:relative" class="css-19rk9qi"><a href="#%E6%97%B6%E9%97%B4" aria-label="时间 permalink" class="anchor before css-1diwg7s"><span><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></span></a>时间</h2>
<style data-emotion="css 109ocif">.css-109ocif{font-family:inherit;font-weight:700;line-height:1.25;margin:0;margin-bottom:0.25rem;font-size:1.5em;margin-top:2rem;color:var(--theme-ui-colors-heading);}@media screen and (min-width: 640px){.css-109ocif{font-size:1.875em;}}@media screen and (min-width: 768px){.css-109ocif{font-size:1.875em;}}@media screen and (min-width: 1024px){.css-109ocif{font-size:2em;}}</style><style data-emotion="css qk407p">.css-qk407p{font-family:inherit;font-weight:700;line-height:1.25;margin:0;margin-bottom:0.25rem;font-size:1.5em;margin-top:2rem;color:var(--theme-ui-colors-heading);font-family:inherit;font-weight:700;line-height:1.25;margin:0;margin-bottom:0.25rem;font-size:1.5em;margin-top:2rem;color:var(--theme-ui-colors-heading);}@media screen and (min-width: 640px){.css-qk407p{font-size:1.875em;}}@media screen and (min-width: 768px){.css-qk407p{font-size:1.875em;}}@media screen and (min-width: 1024px){.css-qk407p{font-size:2em;}}@media screen and (min-width: 640px){.css-qk407p{font-size:1.875em;}}@media screen and (min-width: 768px){.css-qk407p{font-size:1.875em;}}@media screen and (min-width: 1024px){.css-qk407p{font-size:2em;}}</style><h3 id="time" style="position:relative" class="css-qk407p"><a href="#time" aria-label="time permalink" class="anchor before css-1diwg7s"><span><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></span></a>Time</h3>
<p class="css-12jtcxd"><a href="https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/event_time.html" class="css-1diwg7s">Flink 官网介绍</a></p>
<ul class="css-ge23ay">
<li class="css-zezy6m">
<p class="css-12jtcxd">Event Time
是每条数据在其生产设备上发生的时间。这段时间通常嵌入在记录数据中，然后进入Flink，可以从记录中提取事件的时间戳；Event Time即使在数据发生乱序，延迟或者从备份或持久性日志中重新获取数据的情况下，也能提供正确的结果。这个时间是最有价值的，和挂在任何电脑/操作系统的时钟时间无关。</p>
</li>
<li class="css-zezy6m">
<p class="css-12jtcxd">Ingestion Time
是指执行相应操作的机器的系统时间。如果流计算系统基于Processing Time来处理，对流处理系统来说是最简单的，所有基于时间的操作（如Time Window）将使用运行相应算子的机器的系统时钟。然而，在分布式和异步环境中，Processing Time并不能保证确定性，它容易受到Event到达系统的速度（例如来自消息队列）以及数据在Flink系统内部处理的先后顺序的影响，所以Processing Time不能准确地反应数据发生的时间序列情况</p>
</li>
<li class="css-zezy6m">
<p class="css-12jtcxd">Processing Time</p>
</li>
</ul>
<p class="css-12jtcxd">是事件进入Flink的时  间。 在Source算子处产生，也就是在Source处获取到这个数据的时间，Ingestion Time在概念上位于Event Time和Processing Time之间。在Source处获取数据的时间,不受Flink分布式系统内部处理Event的先后顺序和数据传输的影响，相对稳定一些，但是Ingestion Time和Processing Time一样，不能准确地反应数据发生的时间序列情况。</p>
<img src="https://mqjd.github.io/assets/imgs/img/flink_time.jpg" alt="时间" class="css-1aeu565"/>
<h3 id="watermarks" style="position:relative" class="css-qk407p"><a href="#watermarks" aria-label="watermarks permalink" class="anchor before css-1diwg7s"><span><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></span></a>Watermarks</h3>
<p class="css-12jtcxd">Flink实际上是用 Watermarks 来实现Event – Time 的功能。Watermarks 在Flink 中也属于特殊事件，其精髓在于当某个运算值收到带有时间戳“ T ”的 Watermarks 时就意味着它不会接收到新的数据了。使用Watermarks 的好处在于可以准确预估收到数据的截止时间。举例，假设预期收到数据时间与输出结果时间的时间差延迟5 分钟，那么Flink 中所有的 Windows Operator 搜索3 点至4 点的数据，但因为存在延迟需要再多等5分钟直至收集完4：05 分的数据，此时方能判定4 点钟的资料收集完成了，然后才会产出3 点至4 点的数据结果。这个时间段的结果对应的就是 Watermarks 的部分。</p>
<img src="https://mqjd.github.io/assets/imgs/img/flink_watermark.jpg" alt="img" class="css-1aeu565"/>
<h2 id="window" style="position:relative" class="css-19rk9qi"><a href="#window" aria-label="window permalink" class="anchor before css-1diwg7s"><span><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></span></a>Window</h2>
<p class="css-12jtcxd"><a href="https://t.hk.uy/aDBp" class="css-1diwg7s">Time &amp; Window 解析</a></p>
<p class="css-12jtcxd">Apache Flink（以下简称 Flink） 是一个天然支持无限流数据处理的分布式计算框架，在 Flink 中 Window 可以将无限流切分成有限流，是处理有限流的核心组件，现在 Flink 中 Window 可以是时间驱动的（Time Window），也可以是数据驱动的（Count Window）。下面的代码是在 Flink 中使用 Window 的两个示例</p>
<img src="https://mqjd.github.io/assets/imgs/img/flink_keyed_window.jpg" alt="img" class="css-1aeu565"/>
<img src="https://mqjd.github.io/assets/imgs/img/flink_none_keyed_window.jpg" alt="img" class="css-1aeu565"/>
<h2 id="runtime架构" style="position:relative" class="css-19rk9qi"><a href="#runtime%E6%9E%B6%E6%9E%84" aria-label="runtime架构 permalink" class="anchor before css-1diwg7s"><span><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></span></a>Runtime架构</h2>
<p class="css-12jtcxd">Flink 是可以运行在多种不同的环境中的，例如，它可以通过单进程多线程的方式直接运行，从而提供调试的能力。它也可以运行在 Yarn 或者 K8S 这种资源管理系统上面，也可以在各种云环境中执行。针对不同的执行环境，Flink 提供了一套统一的分布式作业执行引擎，也就是 Flink Runtime 这层。Flink 在 Runtime 层之上提供了 DataStream 和 DataSet 两套 API，分别用来编写流作业与批作业，以及一组更高级的 API 来简化特定作业的编写</p>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="681" height="401" style="max-height:100%;max-width:100%" viewBox="-0.5 -0.5 681 401"><path fill="none" d="M0 0h680v400H0z" pointer-events="all"></path><path fill="none" d="M0 400v-80h80v80z" pointer-events="all"></path><switch transform="rotate(-90 71.5 360)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe flex-end;justify-content:unsafe center;width:78px;height:1px;padding-top:360px;margin-left:33px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m"><b style="font-size:16px" class="css-zezy6m"><font style="font-size:16px">Deploy</font></b></div></div></div></foreignObject><text x="72" y="360" font-family="Helvetica" font-size="16" text-anchor="middle">Deploy</text></switch><path fill="#e0e0e0" stroke="#424242" d="M80 320h200v80H80z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:198px;height:1px;padding-top:360px;margin-left:81px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m"><font style="font-size:16px"><b style="font-size:16px" class="css-zezy6m"><font style="font-size:16px">Local</font></b><br style="font-size:16px"/><font style="font-size:16px">Single JVM</font><br style="font-size:16px"/></font></div></div></div></foreignObject><text x="180" y="365" font-family="Helvetica" font-size="16" text-anchor="middle">Local...</text></switch><path fill="#ffe0b2" stroke="#424242" d="M80 160h300v80H80z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:298px;height:1px;padding-top:200px;margin-left:81px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m"><b style="border-color:var(--border-color);font-size:16px" class="css-zezy6m">DataStream API<br style="font-size:16px"/></b><font style="border-color:var(--border-color);font-size:16px">Stream Processing</font></div></div></div></foreignObject><text x="230" y="205" font-family="Helvetica" font-size="16" text-anchor="middle">DataStream API...</text></switch><path fill="#ffe0b2" stroke="#424242" d="M380 160h300v80H380z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:298px;height:1px;padding-top:200px;margin-left:381px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m"><b style="border-color:var(--border-color);font-size:16px" class="css-zezy6m">DataSet API<br style="border-color:var(--border-color);font-size:16px"/></b><font style="border-color:var(--border-color);font-size:16px">Batch Processing</font></div></div></div></foreignObject><text x="530" y="205" font-family="Helvetica" font-size="16" text-anchor="middle">DataSet API...</text></switch><path fill="none" d="M0 320v-80h80v80z" pointer-events="all"></path><switch transform="rotate(-90 71.5 280)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe flex-end;justify-content:unsafe center;width:78px;height:1px;padding-top:280px;margin-left:33px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m"><b style="font-size:16px" class="css-zezy6m"><font style="font-size:16px">Core</font></b></div></div></div></foreignObject><text x="72" y="280" font-family="Helvetica" font-size="16" text-anchor="middle">Core</text></switch><path fill="none" d="M0 240V0h80v240z" pointer-events="all"></path><switch transform="rotate(-90 71.5 120)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe flex-end;justify-content:unsafe center;width:238px;height:1px;padding-top:120px;margin-left:-47px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m"><b style="font-size:16px" class="css-zezy6m"><font style="font-size:16px">APIs &amp; Libraries</font></b></div></div></div></foreignObject><text x="72" y="120" font-family="Helvetica" font-size="16" text-anchor="middle">APIs &amp; Libraries</text></switch><path fill="#e0e0e0" stroke="#424242" d="M280 320h200v80H280z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:198px;height:1px;padding-top:360px;margin-left:281px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m"><font style="font-size:16px"><span style="font-size:16px"><b style="font-size:16px" class="css-zezy6m">Cluster</b></span><br style="font-size:16px"/><font style="font-size:16px">Standalone、YARN</font><br style="font-size:16px"/></font></div></div></div></foreignObject><text x="380" y="365" font-family="Helvetica" font-size="16" text-anchor="middle">Cluster...</text></switch><path fill="#e0e0e0" stroke="#424242" d="M480 320h200v80H480z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:198px;height:1px;padding-top:360px;margin-left:481px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m"><font style="font-size:16px"><span style="font-size:16px"><b style="font-size:16px" class="css-zezy6m">Cloud</b></span><br style="font-size:16px"/><font style="font-size:16px">GCE、EC2</font><br style="font-size:16px"/></font></div></div></div></foreignObject><text x="580" y="365" font-family="Helvetica" font-size="16" text-anchor="middle">Cloud...</text></switch><path fill="#ffecb3" stroke="#424242" d="M80 240h600v80H80z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:598px;height:1px;padding-top:280px;margin-left:81px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m"><font style="font-size:16px"><span style="font-size:16px"><b style="font-size:16px" class="css-zezy6m">Runtime</b></span><br style="font-size:16px"/><font style="font-size:16px">Distributed Streaming Dataflow</font><br style="font-size:16px"/></font></div></div></div></foreignObject><text x="380" y="285" font-family="Helvetica" font-size="16" text-anchor="middle">Runtime...</text></switch><path fill="#fff8e1" stroke="#424242" d="M80 160V0h80v160z" pointer-events="all"></path><switch transform="rotate(-90 117 143)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe flex-start;width:143px;height:1px;padding-top:143px;margin-left:118px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:left" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m"><b style="border-color:var(--border-color);text-align:center;font-size:16px" class="css-zezy6m">CEP<br style="border-color:var(--border-color);font-size:16px"/></b><font style="border-color:var(--border-color);text-align:center;font-size:16px">Event Processing</font></div></div></div></foreignObject><text x="118" y="148" font-family="Helvetica" font-size="16">CEP...</text></switch><path fill="#fff8e1" stroke="#424242" d="M160 160V0h80v160z" pointer-events="all"></path><switch transform="rotate(-90 197 143)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe flex-start;width:143px;height:1px;padding-top:143px;margin-left:198px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:left" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m"><b style="border-color:var(--border-color);text-align:center;font-size:16px" class="css-zezy6m">Table API &amp; SQL<br style="border-color:var(--border-color);font-size:16px"/></b><font style="border-color:var(--border-color);text-align:center;font-size:16px">relational</font></div></div></div></foreignObject><text x="198" y="148" font-family="Helvetica" font-size="16">Table API &amp; SQL...</text></switch><path fill="#fff8e1" stroke="#424242" d="M380 160V0h80v160z" pointer-events="all"></path><switch transform="rotate(-90 417 143)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe flex-start;width:143px;height:1px;padding-top:143px;margin-left:418px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:left" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m"><b style="border-color:var(--border-color);text-align:center;font-size:16px" class="css-zezy6m">FlinkML<br style="border-color:var(--border-color);font-size:16px"/></b><font style="border-color:var(--border-color);text-align:center;font-size:16px">Mache Learning</font></div></div></div></foreignObject><text x="418" y="148" font-family="Helvetica" font-size="16">FlinkML...</text></switch><path fill="#fff8e1" stroke="#424242" d="M460 160V0h80v160z" pointer-events="all"></path><switch transform="rotate(-90 497 143)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe flex-start;width:143px;height:1px;padding-top:143px;margin-left:498px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:left" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m"><b style="border-color:var(--border-color);text-align:center;font-size:16px" class="css-zezy6m">Gelly<br style="border-color:var(--border-color);font-size:16px"/></b><font style="border-color:var(--border-color);text-align:center;font-size:16px">Graph Processing</font></div></div></div></foreignObject><text x="498" y="148" font-family="Helvetica" font-size="16">Gelly...</text></switch><path fill="#fff8e1" stroke="#424242" d="M540 160V0h80v160z" pointer-events="all"></path><switch transform="rotate(-90 577 143)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe flex-start;width:143px;height:1px;padding-top:143px;margin-left:578px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:left" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m"><b style="border-color:var(--border-color);text-align:center;font-size:16px" class="css-zezy6m">Table API &amp; SQL<br style="border-color:var(--border-color);font-size:16px"/></b><font style="border-color:var(--border-color);text-align:center;font-size:16px">relational</font></div></div></div></foreignObject><text x="578" y="148" font-family="Helvetica" font-size="16">Table API &amp; SQL...</text></switch><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"></g><a xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank" transform="translate(0 -5)" class="css-1diwg7s"><text x="50%" y="100%" font-size="10" text-anchor="middle">Text is not SVG - cannot display</text></a></switch></svg>
<p class="css-12jtcxd">Flink Runtime 层的主要架构如下图所示，整体来说，它采用了标准 master-slave 的结构，其中左侧白色圈中的部分即是 master，它负责管理整个集群中的资源和作业；而右侧的两个 TaskExecutor 则是 Slave，负责提供具体的资源并实际执行作业。</p>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1240" height="640" style="max-height:100%;max-width:100%" viewBox="-0.5 -0.5 1240 640"><path fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2" d="M80 185 233.9 45.53" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m238.34 41.5-3.24 8.34-1.2-4.31-4.17-1.62Z" pointer-events="all"></path><path fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2" d="M160 325h71.76" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m237.76 325-8 4 2-4-2-4Z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:311px;margin-left:201px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:12px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:nowrap" class="css-zezy6m">③Submit Job</div></div></div></foreignObject><text x="201" y="314" font-family="Helvetica" font-size="12" text-anchor="middle">③Submit Job</text></switch><rect width="160" height="280" y="185" fill="#009688" pointer-events="all" rx="16" ry="16"></rect><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:158px;height:1px;padding-top:325px;margin-left:1px" class="css-zezy6m"><div data-drawio-colors="color: #FFFFFF;" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:20px;font-family:Helvetica;color:#fff;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m">Client</div></div></div></foreignObject><text x="80" y="331" fill="#FFF" font-family="Helvetica" font-size="20" text-anchor="middle">Client</text></switch><path fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2" d="M470.08 80v9.98l-.07 61.78" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m470 157.76-3.99-8 4 2 4-1.99Z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:111px;margin-left:421px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:12px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:nowrap" class="css-zezy6m">②Launch AM</div></div></div></foreignObject><text x="421" y="115" font-family="Helvetica" font-size="12" text-anchor="middle">②Launch AM</text></switch><path fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2" d="M889.99 80v49.97l.01 21.79" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m890 157.76-4-8 4 2 4-2Z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:111px;margin-left:1021px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:12px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:nowrap" class="css-zezy6m">⑦Spawn TM</div></div></div></foreignObject><text x="1021" y="115" font-family="Helvetica" font-size="12" text-anchor="middle">⑦Spawn TM</text></switch><rect width="1000" height="80" x="240" fill="#2196f3" pointer-events="all" rx="8" ry="8"></rect><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:998px;height:1px;padding-top:40px;margin-left:241px" class="css-zezy6m"><div data-drawio-colors="color: #FFFFFF;" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:#fff;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m">Cluster Management<br/><font style="font-size:16px">(Standalone、YARN、Mesos、K8S)</font></div></div></div></foreignObject><text x="740" y="45" fill="#FFF" font-family="Helvetica" font-size="18" text-anchor="middle">Cluster Management...</text></switch><rect width="460" height="330" x="240" y="160" fill="#ffb74d" pointer-events="all" rx="33" ry="33"></rect><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe flex-start;justify-content:unsafe center;width:458px;height:1px;padding-top:167px;margin-left:241px" class="css-zezy6m"><div data-drawio-colors="color: #FFFFFF;" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:#fff;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m">ApplicationMaster</div></div></div></foreignObject><text x="470" y="185" fill="#FFF" font-family="Helvetica" font-size="18" text-anchor="middle">ApplicationMaster</text></switch><path fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2" d="M350 399.98h39.95l31.81.02" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m427.76 400-8 4 2-4-1.99-4Z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:391px;margin-left:385px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:11px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:nowrap" class="css-zezy6m">④SpawnJM</div></div></div></foreignObject><text x="385" y="394" font-family="Helvetica" font-size="11" text-anchor="middle">④SpawnJM</text></switch><rect width="100" height="270" x="250" y="200" fill="#ff9800" pointer-events="all" rx="10" ry="10"></rect><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:98px;height:1px;padding-top:335px;margin-left:251px" class="css-zezy6m"><div data-drawio-colors="color: #FFFFFF;" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#fff;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m">Dispatcher</div></div></div></foreignObject><text x="300" y="340" fill="#FFF" font-family="Helvetica" font-size="16" text-anchor="middle">Dispatcher</text></switch><rect width="250" height="80" x="430" y="200" fill="#ff9800" pointer-events="all" rx="8" ry="8"></rect><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:248px;height:1px;padding-top:240px;margin-left:431px" class="css-zezy6m"><div data-drawio-colors="color: #FFFFFF;" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#fff;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m">ResourceManager</div></div></div></foreignObject><text x="555" y="245" fill="#FFF" font-family="Helvetica" font-size="16" text-anchor="middle">ResourceManager</text></switch><path fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2" d="M555 330v-41.76" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m555 282.24 4 8-4-2-4 2Z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:307px;margin-left:601px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:11px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:nowrap" class="css-zezy6m">⑤Request Slot</div></div></div></foreignObject><text x="601" y="310" font-family="Helvetica" font-size="11" text-anchor="middle">⑤Request Slot</text></switch><rect width="250" height="140" x="430" y="330" fill="#ff9800" pointer-events="all" rx="14" ry="14"></rect><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe flex-start;justify-content:unsafe center;width:248px;height:1px;padding-top:337px;margin-left:431px" class="css-zezy6m"><div data-drawio-colors="color: #FFFFFF;" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#fff;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m">JobManager</div></div></div></foreignObject><text x="555" y="353" fill="#FFF" font-family="Helvetica" font-size="16" text-anchor="middle">JobManager</text></switch><rect width="210" height="70" x="450" y="380" fill="none" stroke="#000" stroke-dasharray="12 12" pointer-events="all" rx="7" ry="7"></rect><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe flex-start;justify-content:unsafe center;width:208px;height:1px;padding-top:387px;margin-left:451px" class="css-zezy6m"><div data-drawio-colors="color: #FFFFFF;" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:14px;font-family:Helvetica;color:#fff;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m">JobGraph</div></div></div></foreignObject><text x="555" y="401" fill="#FFF" font-family="Helvetica" font-size="14" text-anchor="middle">JobGraph</text></switch><circle cx="492.5" cy="428.5" r="12.5" fill="#bdbdbd" stroke="#000" pointer-events="all"></circle><path fill="#bdbdbd" d="M530 426c0-5.52 4.48-10 10-10h30c5.52 0 10 4.48 10 10v5c0 5.52-4.48 10-10 10h-30c-5.52 0-10-4.48-10-10z" pointer-events="all"></path><path fill="none" d="M532 427v3a9 9 0 0 0 9 9h28a9 9 0 0 0 9-9v-3a9 9 0 0 0-9-9h-28a9 9 0 0 0-9 9" pointer-events="all"></path><path fill="none" stroke="#000" stroke-miterlimit="10" d="M530 426c0-5.52 4.48-10 10-10h30c5.52 0 10 4.48 10 10v5c0 5.52-4.48 10-10 10h-30c-5.52 0-10-4.48-10-10z" pointer-events="all"></path><circle cx="622.5" cy="428" r="12.5" fill="#bdbdbd" stroke="#000" stroke-width="3" pointer-events="all"></circle><path fill="none" stroke="#000" stroke-miterlimit="10" d="M505 428.48h19.96-14.9l13.57.01" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" d="m528.88 428.5-7 3.49 1.75-3.5-1.74-3.5Z" pointer-events="all"></path><path fill="none" stroke="#000" stroke-miterlimit="10" d="M580 428.48h20.07l3.57-.18" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" d="m608.88 428.05-6.82 3.83 1.58-3.58-1.92-3.41Z" pointer-events="all"></path><path fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2" d="M998.24 325h33.52" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m992.24 325 8-4-2 4 2 4Zm45.52 0-8 4 2-4-2-4Z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:311px;margin-left:1017px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:12px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:nowrap" class="css-zezy6m">Shuffle</div></div></div></foreignObject><text x="1017" y="314" font-family="Helvetica" font-size="12" text-anchor="middle">Shuffle</text></switch><path fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2" d="M790 399.98H688.24" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m682.24 399.98 8-4-2 4 2 4Z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:391px;margin-left:742px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:12px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:nowrap" class="css-zezy6m">⑨Offer Slot</div></div></div></foreignObject><text x="742" y="394" font-family="Helvetica" font-size="12" text-anchor="middle">⑨Offer Slot</text></switch><rect width="200" height="330" x="790" y="160" fill="#ffb74d" pointer-events="all" rx="20" ry="20"></rect><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe flex-start;justify-content:unsafe center;width:198px;height:1px;padding-top:167px;margin-left:791px" class="css-zezy6m"><div data-drawio-colors="color: #FFFFFF;" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:#fff;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m">TaskManager</div></div></div></foreignObject><text x="890" y="185" fill="#FFF" font-family="Helvetica" font-size="18" text-anchor="middle">TaskManager</text></switch><rect width="160" height="85" x="810" y="360" fill="#ff9800" pointer-events="all" rx="8.5" ry="8.5"></rect><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:158px;height:1px;padding-top:403px;margin-left:811px" class="css-zezy6m"><div data-drawio-colors="color: #FFFFFF;" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:#fff;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m">StateBackend<br/><font style="font-size:16px">(Heap、Rocksdb)</font></div></div></div></foreignObject><text x="890" y="408" fill="#FFF" font-family="Helvetica" font-size="18" text-anchor="middle">StateBackend...</text></switch><path fill="#f57c00" stroke="#000" d="M820 240h120v60H820z" pointer-events="all"></path><path fill="#f57c00" stroke="#000" d="M830 230h120v60H830z" pointer-events="all"></path><path fill="#f57c00" stroke="#000" d="M840 220h120v60H840z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:118px;height:1px;padding-top:250px;margin-left:841px" class="css-zezy6m"><div data-drawio-colors="color: #FFFFFF;" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#fff;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m">Tasks</div></div></div></foreignObject><text x="900" y="255" fill="#FFF" font-family="Helvetica" font-size="16" text-anchor="middle">Tasks</text></switch><rect width="200" height="330" x="1040" y="160" fill="#ffb74d" pointer-events="all" rx="20" ry="20"></rect><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe flex-start;justify-content:unsafe center;width:198px;height:1px;padding-top:167px;margin-left:1041px" class="css-zezy6m"><div data-drawio-colors="color: #FFFFFF;" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:#fff;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m">TaskManager</div></div></div></foreignObject><text x="1140" y="185" fill="#FFF" font-family="Helvetica" font-size="18" text-anchor="middle">TaskManager</text></switch><rect width="160" height="85" x="1060" y="360" fill="#ff9800" pointer-events="all" rx="8.5" ry="8.5"></rect><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:158px;height:1px;padding-top:403px;margin-left:1061px" class="css-zezy6m"><div data-drawio-colors="color: #FFFFFF;" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:#fff;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m">StateBackend<br/><font style="font-size:16px">(Heap、Rocksdb)</font></div></div></div></foreignObject><text x="1140" y="408" fill="#FFF" font-family="Helvetica" font-size="18" text-anchor="middle">StateBackend...</text></switch><path fill="#f57c00" stroke="#000" d="M1070 240h120v60h-120z" pointer-events="all"></path><path fill="#f57c00" stroke="#000" d="M1080 230h120v60h-120z" pointer-events="all"></path><path fill="#f57c00" stroke="#000" d="M1090 220h120v60h-120z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:118px;height:1px;padding-top:250px;margin-left:1091px" class="css-zezy6m"><div data-drawio-colors="color: #FFFFFF;" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:16px;font-family:Helvetica;color:#fff;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m">Tasks</div></div></div></foreignObject><text x="1150" y="255" fill="#FFF" font-family="Helvetica" font-size="16" text-anchor="middle">Tasks</text></switch><rect width="1000" height="80" x="240" y="560" fill="#757575" pointer-events="all" rx="8" ry="8"></rect><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:998px;height:1px;padding-top:600px;margin-left:241px" class="css-zezy6m"><div data-drawio-colors="color: #FFFFFF;" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:#fff;line-height:1.2;pointer-events:all;white-space:normal;overflow-wrap:normal" class="css-zezy6m">Storage<br/><font style="font-size:16px">(Zookeeper、FileSystem、Rocksdb)</font></div></div></div></foreignObject><text x="740" y="605" fill="#FFF" font-family="Helvetica" font-size="18" text-anchor="middle">Storage...</text></switch><path fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m555.01 478.24.06 71.81v1.71" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m555 472.24 4.01 7.99-4-1.99-4 2Zm.07 85.52-4-8 4 2 4-2Z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:521px;margin-left:581px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:12px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:nowrap" class="css-zezy6m">Meta</div></div></div></foreignObject><text x="581" y="524" font-family="Helvetica" font-size="12" text-anchor="middle">Meta</text></switch><path fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2" d="M890 453.24v98.52" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m890 447.24 4 8-4-2-4 2Zm0 110.52-4-8 4 2 4-2Z" pointer-events="all"></path><path fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m1140 453.24-.06 96.81v1.71" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m1140 447.24 3.99 8-3.99-2-4.01 1.99Zm-.06 110.52-4-8 4 2 4-2Z" pointer-events="all"></path><path fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m555 200 .07-99.98V88.24" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m555.07 82.24 4 8-4-2-4 2Z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:113px;margin-left:621px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:12px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:nowrap" class="css-zezy6m">⑥Allocate Resource</div></div></div></foreignObject><text x="621" y="117" font-family="Helvetica" font-size="12" text-anchor="middle">⑥Allocate Resource</text></switch><path fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2" d="M1139.94 80v9.98l.05 61.78" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m1140 157.76-4.01-7.99 4 1.99 4-2Z" pointer-events="all"></path><path fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m680 240 69.97.05h31.79" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m787.76 240.05-8 4 2-4-2-4Z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:228px;margin-left:745px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:12px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:nowrap" class="css-zezy6m">⑧Request Slot</div></div></div></foreignObject><text x="745" y="231" font-family="Helvetica" font-size="12" text-anchor="middle">⑧Request Slot</text></switch><path fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2" d="M680 439.97h101.76" pointer-events="stroke"></path><path stroke="#000" stroke-miterlimit="10" stroke-width="2" d="m787.76 439.97-8 4 2-4-2-4Z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:430px;margin-left:743px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:12px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:nowrap" class="css-zezy6m">⑩Submit Task</div></div></div></foreignObject><text x="743" y="433" font-family="Helvetica" font-size="12" text-anchor="middle">⑩Submit Task</text></switch><path fill="none" d="M940 520h130v30H940z" pointer-events="all"></path><switch transform="translate(-.5 -.5)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:535px;margin-left:1005px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:12px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:nowrap" class="css-zezy6m">Snapshot / Recovery</div></div></div></foreignObject><text x="1005" y="539" font-family="Helvetica" font-size="12" text-anchor="middle">Snapshot / Recovery</text></switch><switch transform="rotate(-45 140.291 110.354)"><foreignObject width="100%" height="100%" pointer-events="none" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:110px;margin-left:141px" class="css-zezy6m"><div data-drawio-colors="color: rgb(0, 0, 0);" style="box-sizing:border-box;font-size:0;text-align:center" class="css-zezy6m"><div style="display:inline-block;font-size:12px;font-family:Helvetica;color:#000;line-height:1.2;pointer-events:all;white-space:nowrap" class="css-zezy6m"><span style="font-size:16px">①Submit App</span></div></div></div></foreignObject><text x="141" y="114" font-family="Helvetica" font-size="12" text-anchor="middle">①Submit App</text></switch><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"></g><a xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank" transform="translate(0 -5)" class="css-1diwg7s"><text x="50%" y="100%" font-size="10" text-anchor="middle">Text is not SVG - cannot display</text></a></switch></svg>
<p class="css-12jtcxd">其中，Master 部分又包含了三个组件，即 Dispatcher、ResourceManager 和 JobManager。其中，Dispatcher 负责接收用户提供的作业，并且负责为这个新提交的作业拉起一个新的 JobManager 组件。ResourceManager 负责资源的管理，在整个 Flink 集群中只有一个 ResourceManager。JobManager 负责管理作业的执行，在一个 Flink 集群中可能有多个作业同时执行，每个作业都有自己的 JobManager 组件。这三个组件都包含在 AppMaster 进程中。</p>
<p class="css-12jtcxd">基于上述  结构，当用户提交作业的时候，提交脚本会首先启动一个 Client进程负责作业的编译与提交。它首先将用户编写的代码编译为一个 JobGraph，在这个过程，它还会进行一些检查或优化等工作，例如判断哪些 Operator 可以 Chain 到同一个 Task 中。然后，Client 将产生的 JobGraph 提交到集群中执行。此时有两种情况，一种是类似于 Standalone 这种 Session 模式，AM 会预先启动，此时 Client 直接与 Dispatcher 建立连接并提交作业即可。另一种是 Per-Job 模式，AM 不会预先启动，此时 Client 将首先向资源管理系统 （如Yarn、K8S）申请资源来启动 AM，然后再向 AM 中的 Dispatcher 提交作业。</p>
<p class="css-12jtcxd">当作业到 Dispatcher 后，Dispatcher 会首先启动一个 JobManager 组件，然后 JobManager 会向 ResourceManager 申请资源来启动作业中具体的任务。这时根据 Session 和 Per-Job 模式的区别， TaskExecutor 可能已经启动或者尚未启动。如果是前者，此时 ResourceManager 中已有记录了 TaskExecutor 注册的资源，可以直接选取空闲资源进行分配。否则，ResourceManager 也需要首先向外部资源管理系统申请资源来启动 TaskExecutor，然后等待 TaskExecutor 注册相应资源后再继续选择空闲资源进程分配。目前 Flink 中 TaskExecutor 的资源是通过 Slot 来描述的，一个 Slot 一般可以执行一个具体的 Task，但在一些情况下也可以执行多个相关联的 Task，这部分内容将在下文进行详述。ResourceManager 选择到空闲的 Slot 之后，就会通知相应的 TM “将该 Slot 分配分 JobManager XX ”，然后 TaskExecutor 进行相应的记录后，会向 JobManager 进行注册。JobManager 收到 TaskExecutor 注册上来的 Slot 后，就可以实际提交 Task 了。</p>
<p class="css-12jtcxd">TaskExecutor 收到 JobManager 提交的 Task 之后，会启动一个新的线程来执行该 Task。Task 启动后就会开始  进行预先指定的计算，并通过数据 Shuffle 模块互相交换数据。</p>
<p class="css-12jtcxd">以上就是 Flink Runtime 层执行作业的基本流程。可以看出，Flink 支持两种不同的模式，即 Per-job 模式与 Session 模式。如图 3 所示，Per-job 模式下整个 Flink 集群只执行单个作业，即每个作业会独享 Dispatcher 和 ResourceManager 组件。此外，Per-job 模式下 AppMaster 和 TaskExecutor 都是按需申请的。因此，Per-job 模式更适合运行执行时间较长的大作业，这些作业对稳定性要求较高，并且对申请资源的时间不敏感。与之对应，在 Session 模式下，Flink 预先启动 AppMaster 以及一组 TaskExecutor，然后在整个集群的生命周期中会执行多个作业。可以看出，Session 模式更适合规模小，执行时间短的作业。</p>
<img src="https://mqjd.github.io/assets/imgs/svg/flink_processes.svg" alt="img" class="css-1aeu565"/>
<h2 id="transformation" style="position:relative" class="css-19rk9qi"><a href="#transformation" aria-label="transformation permalink" class="anchor before css-1diwg7s"><span><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></span></a>Transformation</h2>
<p class="css-12jtcxd">Transformation操作将1个或多个DataStream转换为新的DataStream，多个转换组合成复杂的数据流拓扑，如下图所示，DataStream会由不同的Transformation操作、转换、过滤、聚合成其他不同的流，从而完成业务要求；</p>
<svg xmlns="http://www.w3.org/2000/svg" width="1036.352" height="641.134"><defs><style>@font-face{font-family:"Virgil";src:url(https://unpkg.com/@excalidraw/excalidraw@undefined/dist/excalidraw-assets/Virgil.woff2)}@font-face{font-family:"Cascadia";src:url(https://unpkg.com/@excalidraw/excalidraw@undefined/dist/excalidraw-assets/Cascadia.woff2)}@font-face{font-family:"Assistant";src:url(https://unpkg.com/@excalidraw/excalidraw@undefined/dist/excalidraw-assets/Assistant-Regular.woff2)}</style></defs><path fill="#fff" d="M0 0h1036.352v641.134H0z"></path><g stroke-linecap="round"><path fill="#ffec99" stroke-width="0" d="M468.85 179.046c41.8 8.6 81.02 4.6 153.98 0 9.77-.71 19.08 3.09 20 20-.72 8 .43 23.42 0 40-1.19 11.95-4.38 17.55-20 20-37.66-.72-61.92-9.27-153.98 0-9.37 1.35-16.82-7.37-20-20-4.36-9.9 2.7-15.36 0-40 3.14-13.07 1.11-18.54 20-20"></path><path fill="none" stroke="#f08c00" stroke-width="4" d="M468.85 179.046c45.51-4.98 86.19-1.25 153.98 0m-153.98 0c33.13-.76 64.39-2.46 153.98 0m0 0c10.91 2.59 20 10.01 20 20m-20-20c17.57 3.51 16.81 10.68 20 20m0 0c.99 10.87-.36 22.96 0 40m0-40c2.12 9.7 1.6 19.32 0 40m0 0c1.77 13.75-10.57 21.84-20 20m20-20c1.1 13.61-10.61 15.86-20 20m0 0c-35.82.9-77.02 2.51-153.98 0m153.98 0c-50.78-.08-104.8 2.89-153.98 0m0 0c-12.37-.18-16.91-4.05-20-20m20 20c-11.15-4.13-22.93-10.39-20-20m0 0c-3.96-8.79-.11-18.85 0-40m0 40c-.56-13.51-.67-22.03 0-40m0 0c-1.05-9.63 2.73-21.08 20-20m-20 20c-.45-17.46 8.71-17.4 20-20"></path></g><text x="85.806" fill="#f08c00" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="28" style="white-space:pre" text-anchor="middle" transform="translate(460.033 201.546)">DataStream</text><g stroke-linecap="round"><path fill="none" stroke="#ffec99" d="M806.852 25.183q0 0 0 0m0 0q0 0 0 0m.14 12.04c.01-6.36 3.15-11.07 12.46-14.34m-12.46 14.34c5.64-4.47 9.85-10.33 12.46-14.34m-12.33 26.38c2.45-6.6 13.23-9.96 22.96-26.41m-22.96 26.41c8.67-8.23 17.62-17.88 22.96-26.41m-22.83 38.45c11.51-15.22 23.4-25.32 33.46-38.49m-33.46 38.49c10.22-10.34 23.14-24.73 33.46-38.49m-33.32 50.53c16.87-21.86 36.9-38.82 43.3-49.81m-43.3 49.81c9.15-13.12 19.9-23.15 43.3-49.81m-39.24 57.33c17.46-19.35 39.45-44.32 49.87-57.36m-49.87 57.36c21.67-20.27 40.78-45.08 49.87-57.36m-39.24 57.32c19.63-22.39 36.09-42.28 49.87-57.36m-49.87 57.36c14.33-17.12 30.59-34.01 49.87-57.36m-39.24 57.33c17.53-22.52 34.78-37.29 49.87-57.36m-49.87 57.36c17.25-20.66 38.4-42.74 49.87-57.36m-39.23 57.32c11.18-16.26 25.35-25.96 49.86-57.35m-49.86 57.35c11.16-11.15 21.09-24.27 49.86-57.35m-39.89 58.07c18.56-17.5 30.64-35.83 50.52-58.11m-50.52 58.11c13.09-18.54 31.25-33.34 50.52-58.11m-39.89 58.08c17.24-20.71 31.77-34.22 50.52-58.11m-50.52 58.11c16.26-16.65 27.19-33.94 50.52-58.11m-39.89 58.07c13.97-14.9 21.08-26.14 50.52-58.11m-50.52 58.11c17.1-19.93 37.69-39.55 50.52-58.11m-39.89 58.08c19.3-20.75 34.52-38.75 50.52-58.11m-50.52 58.11c11.81-11.31 20.31-23.9 50.52-58.11m-39.89 58.08c13.88-18.54 27.81-31.57 49.86-57.36m-49.86 57.36c10.61-14.75 22.86-29.03 49.86-57.36m-39.23 57.32c16.24-15.03 29.86-34.29 49.86-57.36m-49.86 57.36c19.45-22.7 37.84-45.01 49.86-57.36m-39.23 57.33c14.47-15.82 33.17-39.67 49.86-57.36m-49.86 57.36c11.34-12.04 21.94-26.94 49.86-57.36m-39.23 57.32c17.84-20.03 32.8-43.15 49.86-57.36m-49.86 57.36c12.98-17.87 27.7-35.31 49.86-57.36m-39.23 57.33c17.37-16.3 34.92-30.97 49.86-57.36m-49.86 57.36c11.41-11.11 18.91-24.2 49.86-57.36m-39.89 58.08c15.81-22.3 33.13-39.53 49.86-57.36m-49.86 57.36c10.43-12.65 23.6-24.58 49.86-57.36m-39.23 57.32c15.07-16.41 30.74-38.73 45.93-52.83m-45.93 52.83c13.27-17.67 28.16-31.7 45.93-52.83m-35.3 52.8c10.15-17.75 24.96-28.36 39.37-45.28m-39.37 45.28c12.87-12.74 25.3-26.42 39.37-45.28m-28.74 45.24c12.83-11.98 19.8-26 28.21-32.45m-28.21 32.45c7.45-10.65 17.87-20.22 28.21-32.45m-18.23 33.17c10.28-4.55 10.98-16.4 18.37-21.13m-18.37 21.13c3.16-3.97 10.22-11.7 18.37-21.13"></path><path fill="none" stroke="#ffd43b" stroke-width="2" d="M817.862 21.713c37.33 2.4 84.63.47 171.82 0m-171.82 0c62.27 1.84 126.96 2.22 171.82 0m0 0c13.69 3.05 12.23 8.49 15 15m-15-15c8.93-4.04 14.62 6.95 15 15m0 0c-2.97 11.71 1.26 20.81 0 30m0-30c1.2 10.3-1.64 21.11 0 30m0 0c.96 10.24-8.43 11.4-15 15m15-15c-2.64 5.9-.48 16.74-15 15m0 0c-41.03-.18-83.21 1.04-171.82 0m171.82 0c-39.61 2.73-78.65 4.13-171.82 0m0 0c-8.1-3.59-17.55-8.23-15-15m15 15c-13.32-.22-17.49-9.6-15-15m0 0c-.27-11.14 3.5-20.36 0-30m0 30c-.21-4.44-1.66-13.13 0-30m0 0c-.39-13.59 6.77-12.74 15-15m-15 15c-1.42-7.26 1.7-14.71 15-15"></path></g><text x="88.55" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="20" style="white-space:pre" text-anchor="middle" transform="translate(815.224 39.213)">ConnectedStreams</text><g stroke-linecap="round"><path fill="none" stroke="#ffec99" d="M828.518 195.65q0 0 0 0m0 0q0 0 0 0m-3.14 15.82c6.58-1.47 4.31-5.71 16.4-18.87m-16.4 18.87c4.1-7.42 10.73-14.02 16.4-18.87m-16.27 30.91c10.15-9.61 12.06-18.09 26.9-30.95m-26.9 30.95c9.44-8.98 18.02-20.57 26.9-30.95m-27.42 43.74c9.87-10.68 17.12-22.54 37.39-43.02m-37.39 43.02c15.65-16.51 26.36-33.35 37.39-43.02m-35.29 52.8c7.18-14.17 24.17-27.12 45.92-52.83m-45.92 52.83c14.33-13.06 26.8-29 45.92-52.83m-39.89 58.08c22.52-22.95 36-41.07 50.52-58.12m-50.52 58.12c20.34-22.45 39.27-44.6 50.52-58.12m-39.89 58.08c13.7-16.49 24.5-33.42 50.52-58.11m-50.52 58.11c16.09-18.75 30.69-34.98 50.52-58.11m-39.89 58.08c14.51-11.95 21.47-29.11 50.52-58.11m-50.52 58.11c14.81-20.49 34.66-39.42 50.52-58.11m-39.88 58.07c7.9-12.34 25.65-25.55 50.51-58.11m-50.51 58.11c17.36-22.36 37.13-40.21 50.51-58.11m-40.54 58.83c14.43-19.43 32.84-38.59 51.17-58.86m-51.17 58.86c10.99-12.64 21.58-26.37 51.17-58.86m-40.54 58.83c9.91-13.35 22.95-21.89 51.17-58.87m-51.17 58.87c15.15-18.24 31.14-34.69 51.17-58.87m-40.54 58.83c15.13-15.12 25.77-30.3 51.17-58.86m-51.17 58.86c16.25-20.4 32.23-38.05 51.17-58.86m-40.54 58.83c10.02-15.02 25.68-28.55 50.52-58.11m-50.52 58.11c15.85-18.89 31.33-36.87 50.52-58.11m-39.89 58.08c9.74-15.15 27.41-30.75 50.52-58.12m-50.52 58.12c14.2-16.45 27.92-30.75 50.52-58.12m-39.89 58.08c19.29-18.06 36.03-35.78 50.52-58.11m-50.52 58.11c14.28-17.73 29.95-33.41 50.52-58.11m-39.89 58.08c16.13-18.84 42.18-41.62 50.52-58.12m-50.52 58.12c18.9-19.22 38.49-41.41 50.52-58.12m-39.89 58.08c16.6-16.29 28.9-39.95 50.52-58.11m-50.52 58.11c12.8-14.2 22.1-25.11 50.52-58.11m-39.89 58.08c11.3-20.79 29.35-35.98 50.52-58.12m-50.52 58.12c17.26-15.48 30.73-34.91 50.52-58.12m-40.55 58.84c8.7-11.49 20.58-27.17 50.52-58.11m-50.52 58.11c15.42-16.82 28.89-35.17 50.52-58.11m-39.89 58.07c18.86-18.47 33.47-41.57 44.62-51.32m-44.62 51.32c10.23-10.08 19.7-23.49 44.62-51.32m-33.99 51.29c9.09-12.53 14.06-19.75 35.43-40.76m-35.43 40.76c12.9-13.66 25.08-26.35 35.43-40.76m-24.8 40.72c6.93-5.69 15.03-17.14 24.28-27.92m-24.28 27.92c7.3-6.72 10.76-11.93 24.28-27.92m-14.3 28.64c3.25-9.57 12.05-15.83 14.43-16.6m-14.43 16.6c3.11-5.81 8.32-12.29 14.43-16.6"></path><path fill="none" stroke="#ffd43b" stroke-width="2" d="M839.528 192.18c69.29-1.98 132.38-3.75 171.82 0m-171.82 0c64.53-1.34 123.99-1.13 171.82 0m0 0c9.07-3.51 14.67 6.7 15 15m-15-15c9.78.4 15.95 1.52 15 15m0 0c1.64 13.2 2.94 24.05 0 30m0-30c-.1 9.43-2.3 16.83 0 30m0 0c-2.3 6.43-1.07 16.51-15 15m15-15c-2.44 7.29-5.58 16.59-15 15m0 0c-55.32-2.24-102.03 2.23-171.82 0m171.82 0c-49.81.45-102.81.63-171.82 0m0 0c-12.88-.19-17.17-9-15-15m15 15c-9.62-.17-15.71-5.34-15-15m0 0c-4.13-9.67 2.24-16.21 0-30m0 30c.4-13.58 1.48-22.43 0-30m0 0c-1.23-7.62 2.13-14.75 15-15m-15 15c4.52-11.55 6.23-17.93 15-15"></path></g><text x="89.12" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="20" style="white-space:pre" text-anchor="middle" transform="translate(836.32 209.68)">AllWindowedStream</text><g stroke-linecap="round"><path fill="none" stroke="#ffec99" d="M413.461 411.756q0 0 0 0m0 0q0 0 0 0m.79 11.29c5.14-2.93 7.98-11.26 11.15-12.83m-11.15 12.83c2.59-2.19 6.56-4.82 11.15-12.83m-11.02 24.87c8.53-5.11 14.64-13.67 21.65-24.91m-21.65 24.91c7.08-8.87 16.75-18.48 21.65-24.91m-26.11 42.23c15.03-9.19 22.09-21.85 36.74-42.26m-36.74 42.26c10.4-11.41 22.87-26.7 36.74-42.26m-32.01 49.02c8.15-13.03 21.73-20.06 41.99-48.3m-41.99 48.3c16.54-16.77 30.7-34.16 41.99-48.3m-35.95 53.55c17.57-13.67 26.57-28.98 46.58-53.59m-46.58 53.59c13.48-16.93 28.32-33.32 46.58-53.59m-35.95 53.55c13.1-14.72 27.19-26.73 46.58-53.58m-46.58 53.58c9.82-13 23.62-24.8 46.58-53.58m-35.95 53.55c17.71-15.5 32.88-39.01 46.58-53.58m-46.58 53.58c9.9-12.53 23.53-29.06 46.58-53.58m-35.95 53.55c18.14-17.37 31.93-38.52 46.58-53.59m-46.58 53.59c9.78-12.53 19.53-25.32 46.58-53.59m-35.95 53.55c7.88-8.43 22.63-24.69 46.58-53.58m-46.58 53.58c15.78-19.27 34.84-39.71 46.58-53.58m-36.61 54.3c13.55-19.62 25.52-35.16 47.24-54.34m-47.24 54.34c12.4-16.46 26.29-29.17 47.24-54.34m-36.61 54.31c14.08-10.72 28.75-28.27 47.24-54.34m-47.24 54.34c12.24-15.16 25.87-31.82 47.24-54.34m-36.61 54.3c16.12-18.82 30.08-35.92 46.58-53.58m-46.58 53.58c11.46-14.55 25.47-29.47 46.58-53.58m-35.95 53.55c10.89-15.77 22.02-29.07 46.58-53.59m-46.58 53.59c12.4-13.25 22.52-25.47 46.58-53.59m-35.95 53.55c12.92-15.99 25.86-33.07 46.58-53.58m-46.58 53.58c10.12-10.11 16.76-22.67 46.58-53.58m-35.95 53.55c19.48-18.99 32.47-39.48 47.24-54.34m-47.24 54.34c17.29-21.43 33.63-41.57 47.24-54.34m-36.61 54.3c12.7-20.16 27.25-32.7 42.64-49.05m-42.64 49.05c10.1-8.96 20.56-22.46 42.64-49.05m-32.01 49.02c10.25-14.94 17.05-20.84 36.74-42.26m-36.74 42.26c12.67-15.96 27.71-32.94 36.74-42.26m-26.77 42.98c8.89-7.46 20.07-17.31 26.25-30.19m-26.25 30.19c10.27-11.37 17.61-19.17 26.25-30.19m-14.96 29.4c2-5.98 12.15-10.62 15.09-17.36m-15.09 17.36c4.14-6.46 11.84-12.14 15.09-17.36"></path><path fill="none" stroke="#ffd43b" stroke-width="2" d="M423.331 408.646c43.24 1.74 84.64 5.42 143.32 0m-143.32 0c53.47-4.26 107.71-1.65 143.32 0m0 0c8.77.34 14.27 1.46 13.45 13.45m-13.45-13.45c12.25 1.38 17.02 6.16 13.45 13.45m0 0c.79 5.54 2.21 19.85 0 26.89m0-26.89c-1.61 6.44 1.5 17.21 0 26.89m0 0c-2.13 6.6-4.99 14.83-13.45 13.45m13.45-13.45c.3 10.84-2.79 10.38-13.45 13.45m0 0c-30.6 3.77-58.23 2.58-143.32 0m143.32 0c-31.58-2.42-61.36-4.32-143.32 0m0 0c-8.64-.15-14.06-4.78-13.45-13.45m13.45 13.45c-11.15 3.99-15.6-8.63-13.45-13.45m0 0c3.34-10.6-1.45-13.71 0-26.89m0 26.89c-.85-4.46-1.68-11.18 0-26.89m0 0c3.93-10.32 5.56-16 13.45-13.45m-13.45 13.45c-.58-9.72 1.54-13.94 13.45-13.45"></path></g><text x="61.95" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="20" style="white-space:pre" text-anchor="middle" transform="translate(433.04 423.04)">KeyedStream</text><g stroke-linecap="round"><path fill="none" stroke="#ffec99" d="M358.095 574.604q0 0 0 0m0 0q0 0 0 0m-3.14 15.82c3.2-5.94 8.09-13.23 16.4-18.87m-16.4 18.87c5.26-8.49 11.18-12.1 16.4-18.87m-16.27 30.91c12.76-10.82 20.2-24.81 26.9-30.95m-26.9 30.95c8.86-10.98 17.19-18.81 26.9-30.95m-27.42 43.74c14.77-21.15 29-37.15 37.39-43.02m-37.39 43.02c12.51-13.18 25.63-31.35 37.39-43.02m-35.29 52.8c14.31-10.73 22.48-24.57 45.92-52.83m-45.92 52.83c16.16-20.92 34.77-37 45.92-52.83m-39.89 58.08c18.85-20.95 38.44-44.16 50.52-58.12m-50.52 58.12c14.7-18.66 29.09-34.99 50.52-58.12m-39.89 58.08c11.46-15.85 27.65-35.57 50.52-58.11m-50.52 58.11c15.95-19.44 29.58-36 50.52-58.11m-39.89 58.08c16.16-17.04 35.28-43.29 50.52-58.11m-50.52 58.11c18.31-18.44 36.37-38.48 50.52-58.11m-39.88 58.07c14.72-17.46 38.46-40.55 50.51-58.11m-50.51 58.11c15.35-17.01 30.57-38.07 50.51-58.11m-40.54 58.83c22.23-25.37 42.13-49.44 51.17-58.86m-51.17 58.86c16.63-18.86 35.82-39.12 51.17-58.86m-40.54 58.83c10.78-14.77 25.47-27.87 51.17-58.87m-51.17 58.87c12.16-14.8 24.23-28.8 51.17-58.87m-40.54 58.83c18.52-23.76 42-48.47 51.17-58.86m-51.17 58.86c15.8-17.75 32.42-34.37 51.17-58.86m-40.54 58.83c12.91-17.59 27.72-34.97 50.52-58.11m-50.52 58.11c12.97-13.65 25.85-31.52 50.52-58.11m-39.89 58.08c11.46-15.62 27.74-28.21 50.52-58.12m-50.52 58.12c16.95-17.76 33.77-38.36 50.52-58.12m-39.89 58.08c13.33-15.6 31.27-34.93 50.52-58.11m-50.52 58.11c17.56-15.26 32.79-33.35 50.52-58.11m-39.89 58.08c21.46-16.83 37.4-40.29 50.52-58.12m-50.52 58.12c15.62-18.1 27.17-33.8 50.52-58.12m-39.89 58.08c7.42-15.64 22.09-22.96 50.52-58.11m-50.52 58.11c16.8-21.36 37.04-41.82 50.52-58.11m-39.89 58.08c14.58-14.84 21.84-28.29 50.52-58.12m-50.52 58.12c15.38-17.17 28.62-32.82 50.52-58.12m-40.55 58.84c19.02-21.37 34.54-39.75 50.52-58.11m-50.52 58.11c11.21-13.53 20.32-26.29 50.52-58.11m-39.89 58.07c15.41-14.43 23.87-33.38 44.62-51.32m-44.62 51.32c10.82-16.07 24.64-28.22 44.62-51.32m-33.99 51.29c11.6-10.51 24.79-26.1 35.43-40.76m-35.43 40.76c12.28-11.84 21.31-25.41 35.43-40.76m-24.8 40.72c9.45-12.66 22.14-18.43 24.28-27.92m-24.28 27.92c3.69-5.43 9.03-10.71 24.28-27.92m-14.3 28.64c5.08-8.98 9.03-13.88 14.43-16.6m-14.43 16.6c4.34-2.37 7-6.13 14.43-16.6"></path><path fill="none" stroke="#ffd43b" stroke-width="2" d="M369.105 571.134c54.62-5.93 106.63-4.1 171.82 0m-171.82 0c36.36-1.29 73.33-2.97 171.82 0m0 0c12.86 1.2 18.11 6.46 15 15m-15-15c12.37 3.17 17.04 5.48 15 15m0 0c.52 2.64-3.32 9.84 0 30m0-30c-.47 5.15.34 13.34 0 30m0 0c.26 11.63-3.52 12.33-15 15m15-15c-4.03 13.77-3.89 14.79-15 15m0 0c-68.41-.92-132.87-1.25-171.82 0m171.82 0c-50.58-3.51-101.79-3.58-171.82 0m0 0c-11.9 3.48-16.87-8.6-15-15m15 15c-12.41 3.18-16.21-.74-15-15m0 0c-3.43-4.27 2.42-13.32 0-30m0 30c2.4-11.46.97-22.85 0-30m0 0c-.51-10.66 2.44-15.43 15-15m-15 15c3.13-10.31 3.79-17.94 15-15"></path></g><text x="77.3" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="20" style="white-space:pre" text-anchor="middle" transform="translate(377.717 588.634)">WindowedStream</text><g stroke-linecap="round"><path fill="none" stroke="#ffec99" d="M13.99 202.759q0 0 0 0m0 0q0 0 0 0m.14 12.04c5.51-1.37 10.26-8.88 12.46-14.34m-12.46 14.34c3.66-2.52 5.7-4.38 12.46-14.34m-12.33 26.38c8.4-7.15 15.27-16.28 22.96-26.41m-22.96 26.41c8.05-7.81 14.34-14.5 22.96-26.41m-22.83 38.45c9.56-7.59 11.39-17.71 33.46-38.49m-33.46 38.49c12.97-14.08 28.69-28.77 33.46-38.49m-33.32 50.53c19.43-19.94 37.74-40.16 43.3-49.81m-43.3 49.81c11.02-13.4 21.71-25.2 43.3-49.81m-39.24 57.33c15.43-18.42 31.64-37.43 49.87-57.36m-49.87 57.36c12.45-13.19 25.77-28.91 49.87-57.36m-39.24 57.32c16.16-15.69 34.73-33.92 49.87-57.36m-49.87 57.36c15.04-15.25 25.68-31.65 49.87-57.36m-39.24 57.33c20.98-19.92 34.08-40.68 49.87-57.36m-49.87 57.36c17.46-20.5 33.51-41.8 49.87-57.36m-39.23 57.32c18.12-22.75 35.15-44.49 49.86-57.35m-49.86 57.35c21.08-19.8 37.57-39.82 49.86-57.35m-39.89 58.07c12.93-12.24 23.09-27.73 50.52-58.11m-50.52 58.11c14.29-20.19 31.24-39.44 50.52-58.11m-39.89 58.08c9.35-13.75 25.8-28.38 50.52-58.11m-50.52 58.11c17.96-16.76 32.19-36.41 50.52-58.11m-39.89 58.07c14.83-16.81 26.32-33.97 50.52-58.11m-50.52 58.11c11.58-15.22 24.58-30.52 50.52-58.11m-39.89 58.08c12.5-13.88 24.37-31.23 50.52-58.11m-50.52 58.11c18.96-22.92 38.64-44.61 50.52-58.11m-39.89 58.08c14.06-17.8 29.91-31.21 49.86-57.36m-49.86 57.36c19.05-22.83 37.86-45.47 49.86-57.36m-39.23 57.32c20.49-25.45 36.54-42.78 49.86-57.36m-49.86 57.36c19.38-23.69 38.45-43.08 49.86-57.36m-39.23 57.33c18.62-25.48 39.53-44.25 49.86-57.36m-49.86 57.36c9.11-12.51 21.46-24.49 49.86-57.36m-39.23 57.32c12.8-8.09 16.42-25.19 49.86-57.36m-49.86 57.36c10.47-16.03 25.8-27.77 49.86-57.36m-39.23 57.33c12.2-14.04 22.38-26.56 49.86-57.36m-49.86 57.36c13.51-12.66 25.61-26.78 49.86-57.36m-39.89 58.08c13.04-18.17 33.17-35.99 50.52-58.11m-50.52 58.11c12.49-12.4 25.35-25.91 50.52-58.11m-39.89 58.07c15.29-15.04 31.86-37.21 46.58-53.58m-46.58 53.58c10.61-11.14 21.77-23.73 46.58-53.58m-35.95 53.55c13.74-19.24 27.92-30.93 39.37-45.28m-39.37 45.28c14.32-14.99 26.81-28.23 39.37-45.28m-28.74 45.24c3.73-9.32 12.07-21.14 28.87-33.2m-28.87 33.2c10.84-12.48 16.86-21.36 28.87-33.2m-18.24 33.17c1.17-3.48 8.49-6.53 17.72-20.38m-17.72 20.38c8.16-6.89 11.51-14.47 17.72-20.38"></path><path fill="none" stroke="#ffd43b" stroke-width="2" d="M25 199.289c36.36.47 81.45.61 172.8 0m-172.8 0c54.76 3.22 108.2 3.34 172.8 0m0 0c12.05 2.76 16.77 5.42 15 15m-15-15c5.51 2.11 16.1 5.27 15 15m0 0c-4.11 10.35.97 10.73 0 30m0-30c.05 8.05.66 13.13 0 30m0 0c-3.51 13.28-4.04 14.82-15 15m15-15c3.55 13.01-2.82 10.87-15 15m0 0c-41-4.66-85.63-2.16-172.8 0m172.8 0c-52.14 1.48-103.33-2.06-172.8 0m0 0c-12.09 2.77-16.05-1.29-15-15m15 15c-14.53-1.24-15.45-9.13-15-15m0 0c2.04-13.2-.09-16.73 0-30m0 30c-.41-8.32-1.44-16.19 0-30m0 0c2.72-10.27 3.94-17.56 15-15m-15 15c-.27-9.78 4.03-16.14 15-15"></path></g><text x="91.41" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="20" style="white-space:pre" text-anchor="middle" transform="translate(19.99 216.789)">CoGroupedStreams</text><g stroke-linecap="round"><path fill="none" stroke="#ffec99" d="M102.705 13.47q0 0 0 0m0 0q0 0 0 0m-3.14 15.82c2.1-6.21 13.79-11.88 16.4-18.87m-16.4 18.87c5.5-6.01 9.46-11.87 16.4-18.87m-16.27 30.91c7.31-10.95 20.85-16.55 26.9-30.95m-26.9 30.95c5.17-8.91 13.16-16.24 26.9-30.95m-27.42 43.74c15.6-15.46 21.64-27.06 37.39-43.02m-37.39 43.02c14.09-15.82 26.96-29.24 37.39-43.02m-35.29 52.8c10.89-12.37 30.73-29.64 45.92-52.83m-45.92 52.83c12.76-14.28 24.73-30.11 45.92-52.83m-39.89 58.08c12.18-19.18 28.94-34.08 50.52-58.12m-50.52 58.12c16.86-18.97 32.03-38.32 50.52-58.12m-39.89 58.08c15.08-22.66 35.23-38.07 50.52-58.11m-50.52 58.11c18.28-18.24 31.48-35.18 50.52-58.11m-39.89 58.08c19.49-16.77 36.58-36.61 50.52-58.11m-50.52 58.11c16.57-15.01 30.24-33.58 50.52-58.11m-39.88 58.07c15.76-18.34 23.54-25.78 50.51-58.11m-50.51 58.11c14.9-18 30.51-37.09 50.51-58.11m-40.54 58.83c18.16-15.31 33.67-41.12 51.17-58.86m-51.17 58.86c13.24-14.23 26.82-32.02 51.17-58.86m-40.54 58.83c14.62-18.77 30.39-30.27 51.17-58.87m-51.17 58.87c18.26-20.2 36.3-42.57 51.17-58.87m-40.54 58.83c15.29-15.42 33.66-37.78 51.17-58.86m-51.17 58.86c14.19-16.97 28.39-34.08 51.17-58.86m-40.54 58.83c20.08-21.31 32.3-38.97 50.52-58.11m-50.52 58.11c11.64-12.57 24.7-26.68 50.52-58.11m-39.89 58.08c15.22-13.16 24.1-28.58 50.52-58.12m-50.52 58.12c13.82-14.34 25.89-26.98 50.52-58.12m-39.89 58.08c16.74-12.49 28.53-27.41 50.52-58.11m-50.52 58.11c14.02-14.54 25.04-30.18 50.52-58.11m-39.89 58.08c8.31-17.65 21.39-32.42 50.52-58.12m-50.52 58.12c9.19-11.59 22.62-23.49 50.52-58.12m-39.89 58.08c19.36-20.92 41.38-49.2 50.52-58.11m-50.52 58.11c10.16-14.45 21.31-27.83 50.52-58.11m-39.89 58.08c13.12-18.29 29.9-31.62 50.52-58.12m-50.52 58.12c16.99-21.4 35.98-42.38 50.52-58.12m-40.55 58.84c14.21-20.84 29.83-38.95 50.52-58.11m-50.52 58.11c17.24-21.41 32.45-40.16 50.52-58.11m-39.89 58.07c12.74-17.63 33.26-35.59 45.27-52.07m-45.27 52.07c16.91-17.26 31.63-37.33 45.27-52.07m-34.64 52.04c9.11-11.01 14.8-16.4 36.09-41.51m-36.09 41.51c7.3-8.5 18.57-21.82 36.09-41.51m-25.46 41.47c8.58-11.31 17.71-14.59 25.59-29.43m-25.59 29.43c4.34-7.06 10.34-13.85 25.59-29.43m-14.96 29.4c7.45-4.47 12.12-7.46 14.44-16.6m-14.44 16.6c3.42-7.89 10.82-12.28 14.44-16.6"></path><path fill="none" stroke="#ffd43b" stroke-width="2" d="M113.715 10c50.74.99 97.76 3.03 172.8 0m-172.8 0c58.05.12 114.93-1.05 172.8 0m0 0c6.1 1.84 15.96 5.24 15 15m-15-15c6.05-4.14 12.35.9 15 15m0 0c-2.13 11.43 1.61 24.14 0 30m0-30c-1.53 11.86.7 20.35 0 30m0 0c3.09 12.61-3.1 11.41-15 15m15-15c-2.93 6.28-8.31 14.78-15 15m0 0c-42.62-.33-85.25-1.61-172.8 0m172.8 0c-67.9-1.73-134.24-1.26-172.8 0m0 0c-13.94-1.08-15.39-8.59-15-15m15 15c-7.96 2.6-16.42-2.26-15-15m0 0c-1.39-5.77-2.59-14.2 0-30m0 30c1.75-8.64-.14-18.29 0-30m0 0c-.24-9.81 4.15-15.99 15-15m-15 15c1.88-12.01 1-18.05 15-15"></path></g><text x="69.83" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="20" style="white-space:pre" text-anchor="middle" transform="translate(130.286 27.5)">JoinedStreams</text><g stroke-linecap="round"><path fill="none" stroke="#f08c00" stroke-width="2" d="M306.554 20.65c20.2 6.9 87.4 14.35 120.59 40.14 33.2 25.78 65.48 95.59 78.56 114.57M305.544 19.79c20.1 6.62 87.86 13.49 121.14 39.1 33.29 25.61 65.33 95.07 78.57 114.56"></path><path fill="none" stroke="#f08c00" stroke-width="2" d="M482.244 154.21c7.83 7.55 15.34 13.2 23.01 19.24m-23.01-19.24c7.6 7.53 17.3 14.23 23.01 19.24m-5.26-29.53c2.07 10.98 3.88 19.92 5.26 29.53m-5.26-29.53c1.1 11.35 4.26 21.84 5.26 29.53"></path></g><g stroke-linecap="round"><path fill="none" stroke="#f08c00" stroke-width="2" d="M446.062 217.794c-28.22-7.87-131.51-23.51-169.52-47.4-38.02-23.89-48.16-80.1-58.58-95.92m225.84 141.41c-28.65-8.73-130.89-26.43-168.72-49.45-37.83-23.03-47.93-72.64-58.26-88.69"></path><path fill="none" stroke="#f08c00" stroke-width="2" d="M239.322 101.184c-6.65-7.91-16.8-21.52-20.66-22.48m18.05 18.64c-2.96-4.38-12.42-12.86-20.14-18.91"></path><path fill="none" stroke="#f08c00" stroke-width="2" d="M220.652 109.704c.24-11.36-2.98-28.14-1.99-31m-.62 27.16c2.9-6.65-.85-17.73-1.47-27.43"></path></g><text x="68.368" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="translate(422.516 35.473)">window(…).apply(…)</text><text x="67.6" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="translate(271.802 135.95)">join(DataStream)</text><g stroke-linecap="round"><path fill="none" stroke="#f08c00" stroke-width="2" d="M586.185 172.78c3.51-13.34-12.82-58.75 22.78-80.45s158.96-41.48 190.82-49.77m-212.01 129.47c3.33-13.14-15.34-56.67 20.39-78.12 35.73-21.46 162-42.14 193.97-50.6"></path><path fill="none" stroke="#f08c00" stroke-width="2" d="M776.735 59.28c9.65-4.77 17.59-12.46 25.4-15.97m-25.4 15.97c6.41-2.75 10.23-7.07 25.4-15.97m-29.72-4.1c11.15 2.18 20.58 1.4 29.72 4.1m-29.72-4.1c7.2 1.51 11.93 1.4 29.72 4.1"></path></g><text x="83.888" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(-15.929 535.17 -2074.425)">connect(DataStream)</text><text x="37.28" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(-18.576 591.693 -1909.529)">map()</text><text x="37.28" y="20" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(-18.576 591.693 -1909.529)">flatMap()</text><g stroke-linecap="round"><path fill="none" stroke="#f08c00" stroke-width="2" d="M649.03 202.482c28.86 2.38 144.32 12.08 172.82 14.26m-170.98-12.21c28.89 2.11 142.64 8.33 170.65 10.32"></path><path fill="none" stroke="#f08c00" stroke-width="2" d="M792.75 223.352c4.45.31 13.16-4.54 28.77-8.5m-28.77 8.5c7.01-1.74 14.25-4.86 28.77-8.5m-27.5-11.98c4 4.69 12.43 4.23 27.5 11.98m-27.5-11.98c6.67 3.2 13.61 5.02 27.5 11.98"></path></g><g stroke-linecap="round"><path fill="none" stroke="#f08c00" stroke-width="2" d="M821.042 240.116c-29.33-1.25-148.29-7.74-177.85-9.06m177.01 8.26c-28.88-1.02-145.07-5.55-174.63-7.1"></path><path fill="none" stroke="#f08c00" stroke-width="2" d="M674.192 223.226c-6.27 1.4-15.14 4.39-28.62 8.99m28.62-8.99c-9.2 2.46-20.03 6.96-28.62 8.99m27.7 11.51c-5.85-3.58-14.51-5.56-27.7-11.51m27.7 11.51c-8.91-4.4-19.42-6.77-27.7-11.51"></path></g><text x="39.696" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(3.669 -2549.211 11145.09)">windowAll()</text><text x="31.328" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(3.669 -3514.084 11223.91)">reduce()</text><text x="31.328" y="20" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(3.669 -3514.084 11223.91)">fold()</text><text x="31.328" y="40" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(3.669 -3514.084 11223.91)">sum()</text><text x="31.328" y="60" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(3.669 -3514.084 11223.91)">max()</text><text x="31.328" y="80" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(3.669 -3514.084 11223.91)">……</text><g stroke-linecap="round"><path fill="none" stroke="#f08c00" stroke-width="2" d="M481.481 471.017c-4.29 16.03-21.41 79.78-25.99 96.09m24.57-96.88c-4.4 16.13-21.33 81.86-25.28 98"></path><path fill="none" stroke="#f08c00" stroke-width="2" d="M451.731 538.377c1.79 9.31.52 15.39 3.05 29.85m-3.05-29.85c2.01 12.06 2.88 21.91 3.05 29.85"></path><path fill="none" stroke="#f08c00" stroke-width="2" d="M471.631 543.407c-3.94 7.88-10.93 12.51-16.85 24.82m16.85-24.82c-5.61 10.13-12.34 18.06-16.85 24.82"></path></g><text x="30.24" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="translate(487.782 500.93)">window()</text><path fill="none" stroke="#f08c00" stroke-linecap="round" stroke-width="2" d="M510.017 268.132c-6.43 23.53-30.99 115.99-37.06 139.35m38.71-139.87c-6.6 23.79-33.12 118.25-39.51 141.38m-2.31-29.91c2.22 10.58 1.26 21.72 2.31 29.91m-2.31-29.91c.35 10.14 1.11 21.83 2.31 29.91m17.45-24.4c-4.4 8.55-12.01 17.84-17.45 24.4m17.45-24.4c-6.9 7.95-13.36 17.63-17.45 24.4"></path><text x="27.616" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="translate(427.94 321.25)">keyBy()</text><g stroke-linecap="round"><path fill="none" stroke="#f08c00" stroke-width="2" d="M512.85 404.07c6.53-23.43 32.37-117.9 38.57-141.45m-39.55 140.82c6.41-23.32 32.12-116.53 38.9-139.85"></path><path fill="none" stroke="#f08c00" stroke-width="2" d="M552.99 293.51c.6-8.73-3.22-20.65-2.22-29.92m2.22 29.92c-.81-7.56-.67-13.16-2.22-29.92"></path><path fill="none" stroke="#f08c00" stroke-width="2" d="M533.24 287.93c7-7.07 9.58-17.18 17.53-24.34m-17.53 24.34c3.48-6.33 7.94-10.7 17.53-24.34"></path></g><text x="31.328" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(16.268 -745.934 2103.574)">reduce()</text><text x="31.328" y="20" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(16.268 -745.934 2103.574)">fold()</text><text x="31.328" y="40" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(16.268 -745.934 2103.574)">sum()</text><text x="31.328" y="60" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(16.268 -745.934 2103.574)">max()</text><text x="31.328" y="80" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(16.268 -745.934 2103.574)">……</text><g stroke-linecap="round"><path fill="none" stroke="#f08c00" stroke-width="2" d="M561.02 609.637c7.57-4.09 31.47 3.76 46.72-24.62 15.26-28.38 40.12-91.52 44.82-145.65 4.7-54.14-13.81-149.29-16.63-179.16m-73.11 351.54c7.89-3.8 32.41 3.39 47.18-25.22 14.77-28.62 37.08-92.27 41.45-146.48 4.37-54.2-12.32-148.83-15.22-178.76m13.8 26.64c-6.17-10.78-9.44-19.68-13.8-26.64m13.8 26.64c-2.93-5.41-6.01-9.79-13.8-26.64"></path><path fill="none" stroke="#f08c00" stroke-width="2" d="M629.68 290.567c.92-11.57 4.72-21.39 6.55-29.28m-6.55 29.28c1.13-5.93 2.12-10.84 6.55-29.28"></path></g><text x="31.328" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(11.485 -1662.916 3517.649)">reduce()</text><text x="31.328" y="20" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(11.485 -1662.916 3517.649)">fold()</text><text x="31.328" y="40" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(11.485 -1662.916 3517.649)">sum()</text><text x="31.328" y="60" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(11.485 -1662.916 3517.649)">max()</text><text x="31.328" y="80" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(11.485 -1662.916 3517.649)">……</text><g stroke-linecap="round"><path fill="none" stroke="#f08c00" stroke-width="2" d="M219.23 233.775c37.28.51 186.29 3.53 223.5 4.22m-221.64-2.24c37.21.72 183.99 3.18 220.74 3.76m-28.36 9.8c4.47-1.92 12.86-4.62 28.36-9.8m-28.36 9.8c7.88-4.02 16.12-5.29 28.36-9.8"></path><path fill="none" stroke="#f08c00" stroke-width="2" d="M413.81 228.795c4.38 2.76 12.69 4.73 28.02 10.72m-28.02-10.72c7.68 1.99 15.82 6.72 28.02 10.72"></path></g><text x="68.368" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="translate(254.286 244.779)">window(…).apply(…)</text><path fill="none" stroke="#f08c00" stroke-linecap="round" stroke-width="2" d="M467.699 266.366c-.34 7.54 1.36 16.04-.6 27.54m.6-27.54c-.53 6.71-1.38 11.3-.6 27.54m0 0c-85.05.54-170.9-.05-295.84.06m295.84-.06c-90.39-1.19-181.27-.82-295.84.06m0 0c-.48-7.08-2-13.23-1.58-27.8m1.58 27.8c-.02-8.91-1.78-17.62-1.58-27.8m5.13 12.94c-1.68-4.66-1.95-8.64-5.13-12.94m5.13 12.94c-1.19-2.04-2.77-5.59-5.13-12.94m-4.39 13.21c1.25-4.72 3.92-8.79 4.39-13.21m-4.39 13.21c.81-2.16 1.23-5.76 4.39-13.21"></path><text x="86.176" fill="#1e1e1e" dominant-baseline="text-before-edge" font-family="Virgil, Segoe UI Emoji" font-size="16" style="white-space:pre" text-anchor="middle" transform="rotate(-.239 71780.322 -52207.789)">coGroup(DataStream)</text></svg>
<h2 id="shuffle-机制" style="position:relative" class="css-19rk9qi"><a href="#shuffle-%E6%9C%BA%E5%88%B6" aria-label="shuffle 机制 permalink" class="anchor before css-1diwg7s"><span><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></span></a>Shuffle 机制</h2>
<p class="css-12jtcxd"><a href="https://blog.csdn.net/u013411339/article/details/90625623" class="css-1diwg7s">Shuffle机制的重构与优化</a></p>
<p class="css-12jtcxd"><a href="https://app.diagrams.net/#Uhttps%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2Fmqjd%2Fassets%2FFlinkShuffle.drawio" class="css-1diwg7s">Shuffle机制流程图</a></p>
<h2 id="执行图" style="position:relative" class="css-19rk9qi"><a href="#%E6%89%A7%E8%A1%8C%E5%9B%BE" aria-label="执行图 permalink" class="anchor before css-1diwg7s"><span><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></span></a>执行图</h2>
<p class="css-12jtcxd">由 Flink 程序直接映射成的数据流图是 StreamGraph，也被称为逻辑流图，因为它们表示的是计算逻辑的高级视图。为了执行一个流处理程序，Flink 需要将逻辑流图转换为物理数据流图（也叫执行图），详细说明程序的执行方式。</p>
<p class="css-12jtcxd">Flink 中的执行图可以分成四层：StreamGraph -&gt; JobGraph -&gt; ExecutionGraph -&gt; 物理执行图。</p>
<p class="css-12jtcxd">StreamGraph：是根据用户通过 Stream API 编写的代码生成的最初的图。用来表示程序的拓扑结构。</p>
<p class="css-12jtcxd">JobGraph：StreamGraph 经过优化后生成了 JobGraph，提交给 JobManager 的数据结构。主  要的优化为，将多个符合条件的节点 chain 在一起作为一个节点，这样可以减少数据在节点之间流动所需要的序列化/反序列化/传输消耗。</p>
<p class="css-12jtcxd">ExecutionGraph ： JobManager 根据 JobGraph 生成 ExecutionGraph 。 ExecutionGraph 是 JobGraph 的并行化版本，是调度层最核心的数据结构。</p>
<p class="css-12jtcxd">物理执行图：JobManager 根据 ExecutionGraph 对 Job 进行调度后，在各个TaskManager 上部署 Task 后形成的“图”，并不是一个具体的数据结构。</p>
<img src="https://mqjd.github.io/assets/imgs/img/flink_graph.png" alt="API" class="css-1aeu565"/></section></main><style data-emotion="css 1wuwfmf">.css-1wuwfmf{box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;margin-top:8rem;color:var(--theme-ui-colors-secondary);-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;border-top-style:solid;border-top-width:1px;border-top-color:divide;padding-top:1rem;}.css-1wuwfmf a{color:var(--theme-ui-colors-secondary);-webkit-text-decoration:none;text-decoration:none;}.css-1wuwfmf a:hover{color:var(--theme-ui-colors-heading);-webkit-text-decoration:underline;text-decoration:underline;}.css-1wuwfmf a:focus{color:var(--theme-ui-colors-heading);}@media screen and (min-width: 640px){.css-1wuwfmf{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}@media screen and (min-width: 768px){.css-1wuwfmf{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;}}</style><footer class="css-1wuwfmf"><div>© <!-- -->2024<!-- --> based on <!-- -->MQ Blog<!-- -->. All rights reserved.</div><div><a aria-label="Link to the theme&#x27;s GitHub repository" href="https://github.com/LekoArts/gatsby-themes/tree/main/themes/gatsby-theme-minimal-blog" class="css-1s8mmxz">Theme</a> <!-- -->based on<!-- --> <a aria-label="Link to the theme author&#x27;s website" href="https://www.lekoarts.de?utm_source=minimal-blog&amp;utm_medium=Theme" class="css-1s8mmxz">LekoArts</a></div></footer></div></div><div id="gatsby-announcer" style="position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0" aria-live="assertive" aria-atomic="true"></div></div><script id="gatsby-script-loader">/*<![CDATA[*/window.pagePath="/flink-basic";/*]]>*/</script><!-- slice-start id="_gatsby-scripts-1" -->
          <script
            id="gatsby-chunk-mapping"
          >
            window.___chunkMapping="{\"app\":[\"/app-ddab18ac7cf695de545f.js\"],\"component---src-pages-404-tsx\":[\"/component---src-pages-404-tsx-ad7c8039fc2feb5aba4a.js\"],\"component---src-templates-blog-query-tsx\":[\"/component---src-templates-blog-query-tsx-01cc57d5845dff1be852.js\"],\"component---src-templates-homepage-query-tsx\":[\"/component---src-templates-homepage-query-tsx-b28d4083682fb72f3ae9.js\"],\"component---src-templates-page-query-tsx-content-file-path-docs-pages-about-index-mdx\":[\"/component---src-templates-page-query-tsx-content-file-path-docs-pages-about-index-mdx-d4bc04a381a038353c37.js\"],\"component---src-templates-page-query-tsx-content-file-path-docs-pages-bookmark-index-mdx\":[\"/component---src-templates-page-query-tsx-content-file-path-docs-pages-bookmark-index-mdx-d2ff41592c70ccae693f.js\"],\"component---src-templates-page-query-tsx-content-file-path-docs-pages-color-system-index-mdx\":[\"/component---src-templates-page-query-tsx-content-file-path-docs-pages-color-system-index-mdx-825b6ec2da56e7703cd3.js\"],\"component---src-templates-post-query-tsx-content-file-path-docs-posts-bigdata-architecture-index-mdx\":[\"/component---src-templates-post-query-tsx-content-file-path-docs-posts-bigdata-architecture-index-mdx-a5ecb6f720b46b144ad2.js\"],\"component---src-templates-post-query-tsx-content-file-path-docs-posts-docker-desktop-to-colima-index-mdx\":[\"/component---src-templates-post-query-tsx-content-file-path-docs-posts-docker-desktop-to-colima-index-mdx-9edf7886e53ef0df7363.js\"],\"component---src-templates-post-query-tsx-content-file-path-docs-posts-flink-basic-index-mdx\":[\"/component---src-templates-post-query-tsx-content-file-path-docs-posts-flink-basic-index-mdx-dd43c18746c7cdf3072f.js\"],\"component---src-templates-post-query-tsx-content-file-path-docs-posts-flink-environment-index-mdx\":[\"/component---src-templates-post-query-tsx-content-file-path-docs-posts-flink-environment-index-mdx-b57aa39864f780e76e70.js\"],\"component---src-templates-post-query-tsx-content-file-path-docs-posts-flink-memory-index-mdx\":[\"/component---src-templates-post-query-tsx-content-file-path-docs-posts-flink-memory-index-mdx-349fb707417c8abd9660.js\"],\"component---src-templates-post-query-tsx-content-file-path-docs-posts-gatsby-example-index-mdx\":[\"/component---src-templates-post-query-tsx-content-file-path-docs-posts-gatsby-example-index-mdx-a3a4fd96201b9266e5e0.js\"],\"component---src-templates-post-query-tsx-content-file-path-docs-posts-git-operators-index-mdx\":[\"/component---src-templates-post-query-tsx-content-file-path-docs-posts-git-operators-index-mdx-87626a6cf4464e5f6306.js\"],\"component---src-templates-post-query-tsx-content-file-path-docs-posts-github-cdn-index-mdx\":[\"/component---src-templates-post-query-tsx-content-file-path-docs-posts-github-cdn-index-mdx-8bb961da58a726a11942.js\"],\"component---src-templates-post-query-tsx-content-file-path-docs-posts-grid-css-index-mdx\":[\"/component---src-templates-post-query-tsx-content-file-path-docs-posts-grid-css-index-mdx-27a6ab07495115b744d8.js\"],\"component---src-templates-post-query-tsx-content-file-path-docs-posts-mirror-site-index-mdx\":[\"/component---src-templates-post-query-tsx-content-file-path-docs-posts-mirror-site-index-mdx-8fe180811749facf8a7c.js\"],\"component---src-templates-post-query-tsx-content-file-path-docs-posts-mysql-statements-index-mdx\":[\"/component---src-templates-post-query-tsx-content-file-path-docs-posts-mysql-statements-index-mdx-0c6efebf35ecf863bba2.js\"],\"component---src-templates-post-query-tsx-content-file-path-docs-posts-netflix-recommendation-index-mdx\":[\"/component---src-templates-post-query-tsx-content-file-path-docs-posts-netflix-recommendation-index-mdx-d0cc205b2623559aa70c.js\"],\"component---src-templates-post-query-tsx-content-file-path-docs-posts-spark-basic-index-mdx\":[\"/component---src-templates-post-query-tsx-content-file-path-docs-posts-spark-basic-index-mdx-7c794c2fed4acc14bd5b.js\"],\"component---src-templates-post-query-tsx-content-file-path-docs-posts-sql-advanced-grammar-index-mdx\":[\"/component---src-templates-post-query-tsx-content-file-path-docs-posts-sql-advanced-grammar-index-mdx-c66525b7c2b53d287024.js\"],\"component---src-templates-tag-query-tsx\":[\"/component---src-templates-tag-query-tsx-d4b8a83fa1a6117b8b8f.js\"],\"component---src-templates-tags-query-tsx\":[\"/component---src-templates-tags-query-tsx-33a1122e7f92f670a0a7.js\"]}";
          </script>
        <script>window.___webpackCompilationHash="e667a7a7a4885ac5c0ce";</script><script src="/webpack-runtime-3183e811dcdc7f2f5bd8.js" async></script><script src="/framework-83cdbf813badc8905a0e.js" async></script><script src="/app-ddab18ac7cf695de545f.js" async></script><!-- slice-end id="_gatsby-scripts-1" --></body></html>